[sword-svn] r442 - in trunk/webapp: . WEB-INF WEB-INF/classes defines examples layouts rb tiles

scribe at crosswire.org scribe at crosswire.org
Sat Aug 19 10:56:22 MST 2017


Author: scribe
Date: 2017-08-19 10:56:21 -0700 (Sat, 19 Aug 2017)
New Revision: 442

Added:
   trunk/webapp/rb/
   trunk/webapp/rb/body.html
   trunk/webapp/rb/index.jsp
   trunk/webapp/rb/jquery.blockUI.js
   trunk/webapp/rb/jquery.qtip.min.css
   trunk/webapp/rb/jquery.qtip.min.js
   trunk/webapp/rb/jquery.ui.labeledslider.css
   trunk/webapp/rb/jquery.ui.labeledslider.js
   trunk/webapp/rb/loading.gif
Modified:
   trunk/webapp/WEB-INF/classes/trans_en_US.properties
   trunk/webapp/WEB-INF/classes/trans_pt_BR.properties
   trunk/webapp/WEB-INF/classes/trans_zh_CN.properties
   trunk/webapp/WEB-INF/swordweb.properties
   trunk/webapp/defines/tiles.jsp
   trunk/webapp/examples/liddellscott.jsp
   trunk/webapp/examples/transtest.jsp
   trunk/webapp/layouts/base-layout.jsp
   trunk/webapp/print.css
   trunk/webapp/tiles/footer.jsp
   trunk/webapp/tiles/header.jsp
Log:
added reliable bible page
updated tile layout to allow anonymous folder URLs 
added the ability to supply extra footer data from a page
added a 'noprint' class to allow a region to be designated to be hidden during print


Modified: trunk/webapp/WEB-INF/classes/trans_en_US.properties
===================================================================
--- trunk/webapp/WEB-INF/classes/trans_en_US.properties	2017-08-19 09:45:15 UTC (rev 441)
+++ trunk/webapp/WEB-INF/classes/trans_en_US.properties	2017-08-19 17:56:21 UTC (rev 442)
@@ -1,4 +1,4 @@
-#Fri Jun 17 02:42:24 MST 2016
+#Sat Aug 19 06:11:48 MST 2017
 1359135079=
 -1578688434=Bible software developed for the Windows operating environment.
 1063422380=A number of things. You can select preferred Bible translations and other texts, so that your search or study only references your preferred selections. You can also add / remove tabs at the top, depending on texts or functionality that you like or perhaps don’t use. You can also choose the tool’s skin. Our goal is to give you as many preferences as possible, and we’ll be adding more in the coming months.
@@ -25,8 +25,8 @@
 1132835690=Society of Biblical Literature
 106983531=Brazillian Portuguese
 -441839507=Speed optimizations
+-1511568645=Who is behind the Bible Tool? Why are you wearing that wig?
 -1506232183=OSIS website
--1511568645=Who is behind the Bible Tool? Why are you wearing that wig?
 -269383343=Hide Devotionals Tab
 -1642511764=View search results in
 -1276263846=
@@ -40,6 +40,7 @@
 -1359833981=>Last page (
 -26833613=Unbound Bible,
 1147145891=BIBLICAL QUESTIONS
+757610361=Hide Manuscript Coverage Tab
 1991517885=United Bible Societies
 -2124482255=Translate text 2
 3710=Turkish
@@ -90,6 +91,7 @@
 1156859226=
 -1197467108=American Bible Society
 -1659716550=Hide Morphology
+-1399950284=Show Manuscript Coverage Tab
 2598814=Tabs
 -793947317=Is the Bible Tool available on CD?
 -2132933458=Ignore Case (UPPER/lower isn't strictly matched)
@@ -101,8 +103,8 @@
 2136248839=Go to\:
 3239=Greek
 538518468=The Open Scriptural Information Standard (OSIS) is an XML schema for encoding Bibles and related text. Once in OSIS, you can do lots of cool things, like publish the info as a printed book, or PDF, or HTML, or WML for viewing on a cell phone, etc. You can learn more by visiting the 
+2255103=Home
 -1660377174=Hide Daily Devotionals Tab
-2255103=Home
 395882480=Welcome to The Bible Tool-- a free, evolving open source tool for exploring the Bible and related texts online. Created by CrossWire Bible Society, the Society of Biblical Literature and the American Bible Society as the first in a number of coming Bible engagement tools using an XML standard called <acronym title\="Open Scripture Information Standard">OSIS</acronym> , we provide power searching capabilities to help you engage the Bible at a deeper level.
 775598623=Show Parallel Tab
 -395941515=Yes, we took the verses we don&rsquo;t agree with out.
@@ -150,8 +152,8 @@
 21554807=Show Home Tab
 139206051=Bible software developed for the Windows operating environment. Features include\:
 968804337=Advanced- Regular Expression
+2072765255=Testament, book and chapter introductions
 -1278213999=OSIS is a key technical piece that will allow this to happen. Other key pieces include partnerships between organizations like SBL and ABS (to insure large distribution channels), and good content, such as making modern translations and helpful related materials available. That will be a big focus in the coming months.
-2072765255=Testament, book and chapter introductions
 1113579794=Preferred Style
 106426225=page 
 380329950=Hide Strongs
@@ -197,8 +199,8 @@
 -1029354207=OSIS import and export tools
 1978212046=Hide Passage Study Tab
 -140438002=MacSWORD
+97=a
 -1675192211=Xiphos
-97=a
 849261155=Hide Notes
 -996062774=Show Gospel Harmony Tab
 463096583=What makes the Bible Tool different from other Bible search tools?
@@ -261,8 +263,8 @@
 -1632410746=Preferred Commentaries
 768239043=Strong's Numbers are numbers given to words in the Bible by Dr. James Strong for his Exhaustive Concordance, first published in 1890. With the advent of handheld computers, using Strong&rsquo;s numbers has never been easier. By looking up the corresponding number, you can obtain the following information about words in the Bible\:
 -1142430264=Result Page\:
+-71025529=Daily Devotionals\:
 2435598=OSIS
--71025529=Daily Devotionals\:
 -316618734=Many language locales
 80048383=OTHER BIBLE TOOLS
 46=.
@@ -286,29 +288,30 @@
 -87272253=making free, open source Bible tools available which people can customize for themselves and others, built by the hundreds of technical experts who volunteer their time to the CrossWire Bible Society;
 96646644=English
 1370288619=GETTING FREE BIBLE SOFTWARE
+-1110669805=Daily Devotionals
 608402228=Hide Help Tab
--1110669805=Daily Devotionals
+-2113335756=JUST FOR FUN
 -707528937=and Blue Letter Bible
--2113335756=JUST FOR FUN
 911974866=Hide Home Tab
 -1085277225=Lastly, the project presented here, the Klingon Language Version, is actually a relexification of the World English Bible and serves as a demonstration of what a complete Klingon Bible would look like.  A table of the most frequently occuring words (used more than 100 times) was translated, word by word, into Klingon.  This table was used to transform the WEB into Klingon. Though it is not a grammatical Klingon text (actually it is more of a pidgin-Klingon, mixing English vocabulary and grammar with Klingon) it does provide vocabulary which can be used in doing a proper Klingon translation.
 -1906139651=Parallel Bible display
 1375204016=) of search results
 771412785=New language locales
+-770109390=What is Word Study?
 650655508=
--770109390=What is Word Study?
 -1033866599=
 -892589591=Crosswalk
 1397500449=Unicode 4.0 (including Plane 1) support
 1696656910=Show Headings in Bibles
+2038398434=Manuscript Coverage
+1009662050=But in the study of artificial languages, translating standard works of literature like the Bible is often done, and for two reasons.  First, it is a way to exercise and develop the language, and second, it helps to develop a body of literature in that language.  This literature can then be used and referred to by people learning and using the language.
 148412459=APPROPRIATE USE AND PERMISSIONS
-1009662050=But in the study of artificial languages, translating standard works of literature like the Bible is often done, and for two reasons.  First, it is a way to exercise and develop the language, and second, it helps to develop a body of literature in that language.  This literature can then be used and referred to by people learning and using the language.
 0=
 1221567659=To view all the software available from CrossWire, go to the 
 -253594524=by keyword or phrase\:
 1521066321=Sandy Creek
+313721366=Click to remove.  Reselect on the side to move to the top.
 -944944335=The grass withers, the flower fades; but the word of our God stands forever. Isaiah 40\:8
-313721366=Click to remove.  Reselect on the side to move to the top.
 951899941=Show Daily Devotionals Tab
 -1860636657=Of course we&rsquo;re kidding. No, verses are not missing. However, some verses appear as footnotes in certain translations, because they weren&rsquo;t present in the earliest or most reliable manuscripts. To view these verses, you need to view the entire chapter or any span of verses that includes the verse directly preceding the apparent "missing" verse.
 -1439463711=The software is a combined project of the 

Modified: trunk/webapp/WEB-INF/classes/trans_pt_BR.properties
===================================================================
--- trunk/webapp/WEB-INF/classes/trans_pt_BR.properties	2017-08-19 09:45:15 UTC (rev 441)
+++ trunk/webapp/WEB-INF/classes/trans_pt_BR.properties	2017-08-19 17:56:21 UTC (rev 442)
@@ -1,4 +1,4 @@
-#Mon Jul 03 21:26:58 MST 2017
+#Sat Aug 19 07:27:35 MST 2017
 1359135079=
 -1578688434=
 1063422380=A number of things. You can select preferred Bible translations and other texts, so that your search or study only references your preferred selections. You can also add / remove tabs at the top, depending on texts or functionality that you like or perhaps don&rsquo;t use. You can also choose the tool&rsquo;s skin. Our goal is to give you as many preferences as possible, and we&rsquo;ll be adding more in the coming months.
@@ -276,6 +276,7 @@
 -892589591=Crosswalk
 1397500449=
 1696656910=
+2038398434=
 148412459=APPROPRIATE USE AND PERMISSIONS
 1009662050=
 1221567659=

Modified: trunk/webapp/WEB-INF/classes/trans_zh_CN.properties
===================================================================
--- trunk/webapp/WEB-INF/classes/trans_zh_CN.properties	2017-08-19 09:45:15 UTC (rev 441)
+++ trunk/webapp/WEB-INF/classes/trans_zh_CN.properties	2017-08-19 17:56:21 UTC (rev 442)
@@ -1,4 +1,4 @@
-#Fri Jun 17 03:31:36 MST 2016
+#Sat Aug 19 04:09:17 MST 2017
 \u00001\u00005\u00005\u00009\u00005\u00009\u00003\u00006\u00001\u0000=\u0000 at b\tg\u00D1\u008B,g
 1359135079=\u5B57\u7814\u8BFB\:
 -1578688434=
@@ -102,9 +102,9 @@
 1921124920=\u672C\u9875\u9002\u5B9C\u6253\u5370
 96860=
 -631576071=
-3651=
 \u00001\u00001\u00003\u00002\u00008\u00003\u00005\u00006\u00009\u00000\u0000=\u0000
 -1294426661=
+3651=
 351120534=
 3259=
 -1247791591=\u89E3\u660E\u5723\u7ECF
@@ -292,10 +292,10 @@
 -2128886081=\u53EF\u4ECE\u4F18\u9009\u8BD1\u672C\u533A\u9009\u8BD1\u672C
 \u0000-\u00007\u00002\u00004\u00001\u00000\u00005\u00008\u00007\u00008\u0000=\u0000
 -1712078863=
+\u00006\u00009\u00003\u00006\u00006\u0000=\u0000F\u0000A\u0000Q\u0000 \u0000
 \u0000-\u00002\u00001\u00002\u00000\u00002\u00008\u00004\u00007\u00008\u00005\u0000=\u0000
-\u00006\u00009\u00003\u00006\u00006\u0000=\u0000F\u0000A\u0000Q\u0000 \u0000
+\u0000-\u00001\u00000\u00003\u00003\u00008\u00006\u00006\u00005\u00009\u00009\u0000=\u0000\u00A3[\:yS\u0000t\u0000r\u0000o\u0000n\u0000g\u0000s\u0000
 \u0000-\u00001\u00002\u00004\u00007\u00007\u00009\u00001\u00005\u00009\u00001\u0000=\u0000
-\u0000-\u00001\u00000\u00003\u00003\u00008\u00006\u00006\u00005\u00009\u00009\u0000=\u0000\u00A3[\:yS\u0000t\u0000r\u0000o\u0000n\u0000g\u0000s\u0000
 -1029354207=
 1978212046=\u9690\u853D\u7AE0\u8282\u533A
 \u0000-\u00001\u00002\u00007\u00009\u00009\u00004\u00000\u00005\u00003\u00001\u0000=\u0000
@@ -306,41 +306,41 @@
 -996062774=
 \u00001\u00003\u00007\u00000\u00002\u00008\u00008\u00006\u00001\u00009\u0000=\u0000
 463096583=
+15980382=
 \u0000-\u00007\u00005\u00002\u00005\u00004\u00000\u00005\u00004\u00003\u0000=\u0000
-15980382=
 \u0000-\u00002\u00001\u00001\u00006\u00000\u00009\u00009\u00004\u00008\u00002\u0000=\u0000hQ\u00E8\u0090\u00E8l\u00E3\u0089
 \u0000-\u00007\u00001\u00007\u00001\u00008\u00002\u00009\u00003\u00001\u0000=\u0000
 1766474778=
+\u00001\u00003\u00009\u00007\u00005\u00000\u00000\u00004\u00004\u00009\u0000=\u0000
 96727=
-\u00001\u00003\u00009\u00007\u00005\u00000\u00000\u00004\u00004\u00009\u0000=\u0000
 \u00001\u00002\u00002\u00001\u00005\u00006\u00007\u00006\u00005\u00009\u0000=\u0000
 116358771=
+920334141=\u6240\u6709\u6CE8\u89E3
 3518=
-920334141=\u6240\u6709\u6CE8\u89E3
+-536782370=\u8282\u6216\u6BB5\:
 -1875396253=
--536782370=\u8282\u6216\u6BB5\:
 1742503604=
 -420471141=
 92048783=\u9650\u5236\u641C\u5BFB\u8303\u56F4\:
 \u0000-\u00001\u00009\u00000\u00006\u00001\u00003\u00009\u00006\u00005\u00001\u0000=\u0000
+1486635489=CrossWire Bible Society
 -1279940531=
-1486635489=CrossWire Bible Society
 27422522=\u51C6\u786E\u8BCD
+1850809233=
 \u00001\u00009\u00008\u00003\u00007\u00002\u00006\u00009\u00004\u00007\u0000=\u0000\:_\u009BR\u001Cd\u00FB[ \u0000
-1850809233=
+-1678787584=
 1983726947=\u5F3A\u529B\u641C\u5BFB
--1678787584=
 \u0000-\u00002\u00000\u00002\u00000\u00004\u00004\u00005\u00001\u00002\u00007\u0000=\u0000
 1146753407=
 \u00003\u00008\u00006\u00009\u00004\u00001\u00009\u00007\u00001\u0000=\u0000
 \u0000-\u00001\u00000\u00004\u00007\u00007\u00000\u00004\u00004\u00000\u00001\u0000=\u0000
+649821751=\u7AE0\u8282\u7814\u8BFB 
 \u0000-\u00001\u00006\u00002\u00001\u00007\u00008\u00005\u00001\u00009\u00004\u0000=\u0000
-649821751=\u7AE0\u8282\u7814\u8BFB 
 \u00006\u00009\u00008\u00007\u00008\u00009\u00009\u00006\u00001\u0000=\u0000
+\u00001\u00001\u00009\u00004\u00000\u00004\u00003\u00004\u00005\u00001\u0000=\u0000
 1911936993=
-\u00001\u00001\u00009\u00004\u00000\u00004\u00003\u00004\u00005\u00001\u0000=\u0000
+\u0000-\u00001\u00001\u00004\u00005\u00006\u00005\u00009\u00009\u00004\u00003\u0000=\u0000
 \u0000-\u00001\u00002\u00000\u00005\u00003\u00008\u00005\u00000\u00000\u00002\u0000=\u0000\u001Cd\u00FB[\u00CD\u008BGl\u0000\:\u0000
-\u0000-\u00001\u00001\u00004\u00005\u00006\u00005\u00009\u00009\u00004\u00003\u0000=\u0000
 \u00002\u00000\u00009\u00005\u00002\u00007\u00007\u00002\u00004\u0000=\u0000W\u0000a\u0000s\u0000h\u0000e\u0000d\u0000 \u0000O\u0000u\u0000t\u0000
 1845821898=
 1562868479=
@@ -348,16 +348,16 @@
 \u0000-\u00001\u00006\u00003\u00002\u00004\u00001\u00000\u00007\u00004\u00006\u0000=\u0000P\u0000r\u0000e\u0000f\u0000e\u0000r\u0000r\u0000e\u0000d\u0000 \u0000C\u0000o\u0000m\u0000m\u0000e\u0000n\u0000t\u0000a\u0000r\u0000i\u0000e\u0000s\u0000
 1371173378=
 -661985422=\u641C\u5BFB\:
+1137519804=
+13978684=
 \u00001\u00003\u00005\u00009\u00001\u00003\u00005\u00000\u00007\u00009\u0000=\u0000
-13978684=
-1137519804=
 1056208700=\u5F02\u7AEF /\u975E\u6B63\u7EDF/\u53EF\u7591\u7684\u6750\u6599
 \u00009\u00007\u00005\u00001\u00000\u00000\u00006\u00001\u00006\u0000=\u0000
 \u0000-\u00007\u00004\u00002\u00006\u00002\u00001\u00007\u00001\u00004\u0000=\u0000
+\u0000-\u00001\u00005\u00000\u00006\u00002\u00003\u00002\u00001\u00008\u00003\u0000=\u0000
 -432996320=\u4E0B\u7AE0
-\u0000-\u00001\u00005\u00000\u00006\u00002\u00003\u00002\u00001\u00008\u00003\u0000=\u0000
+\u00006\u00003\u00009\u00006\u00004\u00008\u00000\u00009\u00007\u0000=\u0000P\u0000r\u0000e\u0000f\u0000e\u0000r\u0000r\u0000e\u0000d\u0000 \u0000T\u0000r\u0000a\u0000n\u0000s\u0000l\u0000a\u0000t\u0000i\u0000o\u0000n\u0000s\u0000
 -244035137=
-\u00006\u00003\u00009\u00006\u00004\u00008\u00000\u00009\u00007\u0000=\u0000P\u0000r\u0000e\u0000f\u0000e\u0000r\u0000r\u0000e\u0000d\u0000 \u0000T\u0000r\u0000a\u0000n\u0000s\u0000l\u0000a\u0000t\u0000i\u0000o\u0000n\u0000s\u0000
 771580917=
 1397839042=
 -74543520=
@@ -365,105 +365,106 @@
 -1702845883=
 -1621785194=\u5916\u90E8\u8FDE\u63A5\:
 1281308638=
+\u00002\u00007\u00004\u00002\u00002\u00005\u00002\u00002\u0000=\u0000E\u0000x\u0000a\u0000c\u0000t\u0000 \u0000P\u0000h\u0000r\u0000a\u0000s\u0000e\u0000
 295480946=
-\u00002\u00007\u00004\u00002\u00002\u00005\u00002\u00002\u0000=\u0000E\u0000x\u0000a\u0000c\u0000t\u0000 \u0000P\u0000h\u0000r\u0000a\u0000s\u0000e\u0000
 \u00001\u00006\u00004\u00005\u00003\u00004\u00001\u00009\u00005\u00006\u0000=\u0000
 698789961=
+\u00001\u00006\u00004\u00000\u00000\u00006\u00005\u00009\u00005\u00001\u0000=\u0000\u00A3[\:y\u00CD\u008B9h
 \u0000-\u00001\u00007\u00001\u00000\u00008\u00005\u00008\u00008\u00001\u00003\u0000=\u0000\u0090\u0096\u00CF\u0085 at b\tg
-\u00001\u00006\u00004\u00000\u00000\u00006\u00005\u00009\u00005\u00001\u0000=\u0000\u00A3[\:y\u00CD\u008B9h
 1984518344=OSIS\u7F51\: 
 -251106573=
+\u0000-\u00001\u00009\u00006\u00009\u00009\u00001\u00001\u00009\u00005\u00008\u0000=\u0000M\u0000i\u0000s\u0000c\u0000 \u0000O\u0000p\u0000t\u0000i\u0000o\u0000n\u0000s\u0000
 825576054=\u4E0D\u8981Javascript
-\u0000-\u00001\u00009\u00006\u00009\u00009\u00001\u00001\u00009\u00005\u00008\u0000=\u0000M\u0000i\u0000s\u0000c\u0000 \u0000O\u0000p\u0000t\u0000i\u0000o\u0000n\u0000s\u0000
+-1995153715=
 1914634662=\u6B22\u8FCE\u4F60\u7528\u6B64\u514D\u8D39\u5723\u7ECF\u5DE5\u5177\u6765\u7814\u8BFB\u5723\u7ECF\u53CA\u6709\u5173\u5728\u7EBF\u6750\u6599\u3002\u7531Crosswire\u5723\u7ECF\u5B66\u4F1A\uFF0C\u5723\u7ECF\u6587\u5B66\u5B66\u4F1A\u548C\u7F8E\u56FD\u5723\u7ECF\u5B66\u4F1A\u8054\u5408\u7814\u5236\u3002
--1995153715=
 \u00001\u00008\u00009\u00005\u00009\u00000\u00008\u00006\u00000\u00007\u0000=\u0000
 \u00001\u00007\u00007\u00008\u00006\u00007\u00003\u00008\u00008\u00005\u0000=\u0000
 1035337695=
+-1771240401=
 934874484=
--1771240401=
+1404691029=\u7528\u8282\u6216\u6BB5
 382223617=\u6A21\u5757\u641C\u5BFB\:
-1404691029=\u7528\u8282\u6216\u6BB5
 \u00009\u00002\u00000\u00004\u00008\u00007\u00008\u00003\u0000=\u0000P\u00966R\u001Cd\u00FB[\u0003\u0083\u00F4V\u0000\:\u0000
+-1946624683=\u4EA4\u4E92\u5F0F\u5730\u56FE
 \u00006\u00003\u00007\u00006\u00003\u00003\u00005\u00007\u00000\u0000=\u0000
--1946624683=\u4EA4\u4E92\u5F0F\u5730\u56FE
 1628202757=
 -2132429552=\u73B0\u6709\u6A21\u5757
+-1215128067=
+1463240824=\u8BD1\u672C\:
+637633570=
 -742621714=\u5723\u7ECF\u7814\u7A76\u4E2D\u5FC3
-637633570=
-1463240824=\u8BD1\u672C\:
--1215128067=
+\u00003\u00008\u00002\u00002\u00002\u00003\u00006\u00001\u00007\u0000=\u0000M\u0000o\u0000d\u0000u\u0000l\u0000e\u0000 \u0000t\u0000o\u0000 \u0000s\u0000e\u0000a\u0000r\u0000c\u0000h\u0000\u0000\:\u0000
 \u00007\u00007\u00001\u00004\u00001\u00002\u00007\u00008\u00005\u0000=\u0000
-\u00003\u00008\u00002\u00002\u00002\u00003\u00006\u00001\u00007\u0000=\u0000M\u0000o\u0000d\u0000u\u0000l\u0000e\u0000 \u0000t\u0000o\u0000 \u0000s\u0000e\u0000a\u0000r\u0000c\u0000h\u0000\u0000\:\u0000
 -1632410746=\u4F18\u9009\u8BD1\u672C
 \u0000-\u00002\u00005\u00003\u00005\u00009\u00004\u00005\u00002\u00004\u0000=\u00009hncsQ.\u0095W[\u0016b\u00CD\u008B\u0000\:\u0000
+768239043=
 -1142430264=
-768239043=
+2435598=
+-71025529=
 -316618734=
--71025529=
-2435598=
 80048383=\u522B\u7684\u5723\u7ECF\u5DE5\u5177
+978829617=\u70B9\u53BB\u51FA
+82664747=
 \u00001\u00001\u00006\u00003\u00005\u00008\u00007\u00007\u00001\u0000=\u0000
-82664747=
-978829617=\u70B9\u53BB\u51FA
 -1650831982=
+\u00009\u00006\u00008\u00008\u00000\u00004\u00003\u00003\u00007\u0000=\u0000\u00D8\u009A\u00A7~-\u0000R\u0000e\u0000g\u0000u\u0000l\u0000a\u0000r\u0000 \u0000E\u0000x\u0000p\u0000r\u0000e\u0000s\u0000s\u0000i\u0000o\u0000n\u0000
+N(uJ\u0000a\u0000v\u0000a\u0000s\u0000c\u0000r\u0000i\u0000p\u0000t\u0000=
 \u00001\u00004\u00008\u00006\u00002\u00002\u00000\u00009\u00000\u00006\u0000=\u0000
-N(uJ\u0000a\u0000v\u0000a\u0000s\u0000c\u0000r\u0000i\u0000p\u0000t\u0000=
-\u00009\u00006\u00008\u00008\u00000\u00004\u00003\u00003\u00007\u0000=\u0000\u00D8\u009A\u00A7~-\u0000R\u0000e\u0000g\u0000u\u0000l\u0000a\u0000r\u0000 \u0000E\u0000x\u0000p\u0000r\u0000e\u0000s\u0000s\u0000i\u0000o\u0000n\u0000
 \u0000-\u00001\u00004\u00003\u00009\u00004\u00006\u00003\u00007\u00001\u00001\u0000=\u0000
 1884421896=
+1670666548=
+\u00002\u00008\u00007\u00003\u00002\u00002\u00003\u00001\u00008\u0000=\u0000
 \u00006\u00004\u00009\u00008\u00002\u00001\u00007\u00005\u00001\u0000=\u0000\u00E0z\u0082\u0082\u0014x\u00FB\u008B
-\u00002\u00008\u00007\u00003\u00002\u00002\u00003\u00001\u00008\u0000=\u0000
-1670666548=
 \u00001\u00007\u00005\u00001\u00007\u00009\u00002\u00007\u00006\u00007\u0000=\u0000
 -898880764=
 -1050723907=\u4F18\u9009\u6CE8\u89E3\:
+449930511=
 1816987551=
-449930511=
 234742413=\u9690\u853DFAQ\u533A
+\u00001\u00003\u00009\u00002\u00000\u00006\u00000\u00005\u00001\u0000=\u0000
 93309679=
-\u00001\u00003\u00009\u00002\u00000\u00006\u00000\u00005\u00001\u0000=\u0000
 -1118638381=
 \u0000-\u00001\u00001\u00009\u00007\u00004\u00006\u00007\u00001\u00000\u00008\u0000=\u0000
 \u0000-\u00006\u00003\u00007\u00002\u00003\u00007\u00005\u00004\u00004\u0000=\u0000\tg\t\u0090y\u0098 \u0000
 1751792767=
+462830383=
 \u0000-\u00006\u00004\u00000\u00004\u00003\u00001\u00006\u00003\u00004\u0000=\u0000
-462830383=
 \u00009\u00006\u00001\u00007\u00003\u00001\u00001\u00001\u00001\u0000=\u0000
 \u0000-\u00001\u00006\u00006\u00000\u00009\u00007\u00000\u00003\u00002\u00007\u0000=\u0000
 \u0000-\u00001\u00002\u00008\u00000\u00004\u00009\u00002\u00004\u00004\u00006\u0000=\u0000
 -696790656=
+-2020445127=
 \u00001\u00009\u00001\u00004\u00006\u00003\u00004\u00006\u00006\u00002\u0000=\u0000
--2020445127=
 -87272253=
 96646644=
 1370288619=
+\u0000-\u00006\u00000\u00004\u00003\u00003\u00009\u00004\u00008\u00007\u0000=\u0000
+-1110669805=
 608402228=
--1110669805=
-\u0000-\u00006\u00000\u00004\u00003\u00003\u00009\u00004\u00008\u00007\u0000=\u0000
+-707528937=
 -2113335756=\u597D\u73A9
--707528937=
 911974866=\u9690\u853D\u4E3B\u9875\u533A
 -1085277225=
 -1906139651=
+\u0000-\u00001\u00008\u00006\u00000\u00006\u00003\u00006\u00006\u00005\u00007\u0000=\u0000
 1375204016=
-\u0000-\u00001\u00008\u00006\u00000\u00006\u00003\u00006\u00006\u00005\u00007\u0000=\u0000
 \u00001\u00007\u00003\u00003\u00005\u00004\u00005\u00005\u00002\u00006\u0000=\u0000\u0090\u0096\u00CF\u0085\:_\u009BR\u001Cd\u00FB[
 771412785=
+-770109390=
 650655508=\u70B9\u52A0\u4E0A
--770109390=
 -1033866599=\u663E\u77F3\u7BC6\u6570
 -1776569919=
+\u00002\u00002\u00005\u00005\u00001\u00000\u00003\u0000=\u0000H\u0000o\u0000m\u0000e\u0000
+N\u00A1{'Y\u000F\u0099Q=
 -892589591=Crosswalk
-N\u00A1{'Y\u000F\u0099Q=
-\u00002\u00002\u00005\u00005\u00001\u00000\u00003\u0000=\u0000H\u0000o\u0000m\u0000e\u0000
 1397500449=
 \u0000-\u00001\u00008\u00000\u00007\u00009\u00000\u00007\u00006\u00003\u00009\u0000=\u0000
+\u00001\u00006\u00007\u00000\u00006\u00006\u00006\u00005\u00004\u00008\u0000=\u0000
 1696656910=
-\u00001\u00006\u00007\u00000\u00006\u00006\u00006\u00005\u00004\u00008\u0000=\u0000
 \u00009\u00001\u00001\u00009\u00007\u00004\u00008\u00006\u00006\u0000=\u0000\u0090\u0096\u00CF\u0085;Nu\u0098 \u0000
+2038398434=
+1009662050=
 148412459=
-1009662050=
 \u0000-\u00001\u00004\u00009\u00008\u00004\u00001\u00004\u00006\u00001\u00001\u0000=\u0000>f\:y\u0087e\u0093^
 1221567659=
 -253594524=\u7528\u5173\u952E\u5B57\u8BCD\:
@@ -472,17 +473,17 @@
 \u0000-\u00001\u00007\u00006\u00002\u00007\u00001\u00009\u00001\u00008\u00006\u0000=\u0000
 \u0000-\u00002\u00000\u00002\u00005\u00005\u00002\u00005\u00008\u00006\u00004\u0000=\u0000
 \u0000-\u00004\u00000\u00009\u00008\u00009\u00008\u00000\u00007\u00001\u0000=\u0000\u0090\u0096\u00CF\u0085\#W\u00CF~\u0084v\u0007h\u0098\u0098
+-944944335=
 313721366=\u70B9\u53BB\u51FA\u3002\u91CD\u9009\u52A0\u5165\u6700\u4E0A\u3002
--944944335=
 \u00007\u00007\u00001\u00005\u00008\u00000\u00009\u00001\u00007\u0000=\u0000
 951899941=
 -1860636657=
+\u00008\u00002\u00006\u00006\u00004\u00007\u00004\u00007\u0000=\u0000
 \u0000-\u00006\u00006\u00001\u00009\u00008\u00005\u00004\u00002\u00002\u0000=\u0000S\u0000e\u0000a\u0000r\u0000c\u0000h\u0000\u0000\:\u0000
-\u00008\u00002\u00006\u00006\u00004\u00007\u00004\u00007\u0000=\u0000
 -1439463711=
+\u00001\u00006\u00008\u00009\u00007\u00002\u00007\u00003\u00009\u00002\u0000=\u0000
 \u0000-\u00008\u00009\u00009\u00007\u00000\u00005\u00007\u00001\u00009\u0000=\u0000
-\u00001\u00006\u00008\u00009\u00007\u00002\u00007\u00003\u00009\u00002\u0000=\u0000
 \u0000-\u00001\u00009\u00004\u00006\u00006\u00002\u00004\u00006\u00008\u00003\u0000=\u0000
 -283673852=\u7F8A\u76AE\u7EB8
+\u0000=
 -1261651212=\u6240\u6709\u5B57\u6216\u8BCD\u7247\u65AD
-\u0000=

Modified: trunk/webapp/WEB-INF/swordweb.properties
===================================================================
--- trunk/webapp/WEB-INF/swordweb.properties	2017-08-19 09:45:15 UTC (rev 441)
+++ trunk/webapp/WEB-INF/swordweb.properties	2017-08-19 17:56:21 UTC (rev 442)
@@ -64,26 +64,31 @@
 offeredTabLink.5=eusebian.jsp
 offeredTabDefault.5=true
 
-offeredTabName.6=Library
-offeredTabTitle.6=Full Library
-offeredTabLink.6=fulllibrary.jsp
-offeredTabDefault.6=false
+offeredTabName.6=Manuscript Coverage
+offeredTabTitle.6=Manuscript Coverage
+offeredTabLink.6=rb/
+offeredTabDefault.6=true
 
-offeredTabName.7=Preferences
-offeredTabTitle.7=Preferences
-offeredTabLink.7=preferences.jsp
-offeredTabDefault.7=true
+offeredTabName.7=Library
+offeredTabTitle.7=Full Library
+offeredTabLink.7=fulllibrary.jsp
+offeredTabDefault.7=false
 
-offeredTabName.8=About
-offeredTabTitle.8=About
-offeredTabLink.8=about.jsp
-offeredTabDefault.8=false
+offeredTabName.8=Preferences
+offeredTabTitle.8=Preferences
+offeredTabLink.8=preferences.jsp
+offeredTabDefault.8=true
 
-offeredTabName.9=Help
-offeredTabTitle.9=Help
-offeredTabLink.9=help.jsp
-offeredTabDefault.9=true
+offeredTabName.9=About
+offeredTabTitle.9=About
+offeredTabLink.9=about.jsp
+offeredTabDefault.9=false
 
+offeredTabName.10=Help
+offeredTabTitle.10=Help
+offeredTabLink.10=help.jsp
+offeredTabDefault.10=true
+
 # The above tab list describes all tabs on offer in the default application. 
 # You can add further tabs simply by defining them here and adding the jsp into the application folder.
 #

Modified: trunk/webapp/defines/tiles.jsp
===================================================================
--- trunk/webapp/defines/tiles.jsp	2017-08-19 09:45:15 UTC (rev 441)
+++ trunk/webapp/defines/tiles.jsp	2017-08-19 17:56:21 UTC (rev 442)
@@ -1,6 +1,6 @@
 <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
 
-<tiles:definition id="basic" page="layouts/base-layout.jsp">
+<tiles:definition id="basic" page="/layouts/base-layout.jsp">
 	<tiles:put name="lookup_url" value="passagestudy.jsp" />
 	<tiles:put name="title" value="OSIS web application" />
 	<tiles:put name="header" value="../tiles/header.jsp" />

Modified: trunk/webapp/examples/liddellscott.jsp
===================================================================
--- trunk/webapp/examples/liddellscott.jsp	2017-08-19 09:45:15 UTC (rev 441)
+++ trunk/webapp/examples/liddellscott.jsp	2017-08-19 17:56:21 UTC (rev 442)
@@ -1,3 +1,7 @@
+<%@ page
+    language="java"
+    contentType="text/html;charset=utf-8"
+%>
 <html>
 <body>
 

Modified: trunk/webapp/examples/transtest.jsp
===================================================================
--- trunk/webapp/examples/transtest.jsp	2017-08-19 09:45:15 UTC (rev 441)
+++ trunk/webapp/examples/transtest.jsp	2017-08-19 17:56:21 UTC (rev 442)
@@ -6,7 +6,7 @@
     contentType="text/html;charset=utf-8"
 %>
 
-<%@ taglib uri="/WEB-INF/lib/crosswire-i18n.tld" prefix="t" %>
+<%@ taglib uri="/WEB-INF/crosswire-i18n.tld" prefix="t" %>
 <%
 	String lang = request.getParameter("lang");
 	if (lang != null)

Modified: trunk/webapp/layouts/base-layout.jsp
===================================================================
--- trunk/webapp/layouts/base-layout.jsp	2017-08-19 09:45:15 UTC (rev 441)
+++ trunk/webapp/layouts/base-layout.jsp	2017-08-19 17:56:21 UTC (rev 442)
@@ -21,6 +21,11 @@
 	}
 	else searchTerm = "";
 	String metaContent = (String)session.getAttribute("meta");
+
+	StringBuffer url = request.getRequestURL();
+	String uri = request.getRequestURI();
+	String ctx = request.getContextPath();
+	String base = url.substring(0, url.length() - uri.length() + ctx.length()) + "/";
 %>
 
 <?xml version="1.0" encoding="utf-8"?>
@@ -28,6 +33,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:og="http://ogp.me/ns#" xmlns:fb="https://www.facebook.com/2008/fbml" xml:lang="<%= lang %>" lang="<%= lang %>">
 
 <head profile="http://www.w3.org/2000/08/w3c-synd/#">
+<base href="<%=base%>">
 <meta name="keywords" content="<%= metaContent %>" />
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 	<title><t:t>OSIS Web: </t:t><tiles:getAsString name="title"/></title>
@@ -105,8 +111,11 @@
 	</div>
 </div>
 
+<div id="footer">
 <%-- include footer --%>
+<tiles:insert attribute="extra_footer" ignore="true" />
 <tiles:insert attribute="footer" />
+</div>
 <%
 	String translator = (String)session.getAttribute("translator");
 	if (translator != null) {

Modified: trunk/webapp/print.css
===================================================================
--- trunk/webapp/print.css	2017-08-19 09:45:15 UTC (rev 441)
+++ trunk/webapp/print.css	2017-08-19 17:56:21 UTC (rev 442)
@@ -53,6 +53,10 @@
 	width:0px;
 }
 
+.noprint {
+	display:none;
+}
+
 #content-wrap > #content-sub-2 {
 	display:none;
 	width:0px;

Added: trunk/webapp/rb/body.html
===================================================================
--- trunk/webapp/rb/body.html	                        (rev 0)
+++ trunk/webapp/rb/body.html	2017-08-19 17:56:21 UTC (rev 442)
@@ -0,0 +1,351 @@
+
+	<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/smoothness/jquery-ui.css"/>
+
+	<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
+	<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js"></script>
+
+
+	<!-- custom jquery ui slider extension which supports ticks and labels -->
+	<link rel="stylesheet" href="rb/jquery.ui.labeledslider.css">
+	<script src="rb/jquery.ui.labeledslider.js"></script>
+	<script src="rb/jquery.blockUI.js"></script>
+
+	<!-- custom jquery tooltips -->
+	<link rel="stylesheet" type="text/css" href="rb/jquery.qtip.min.css"/>
+	<script src="rb/jquery.qtip.min.js"></script>
+
+
+	<style type="text/css">
+
+table {
+     border-collapse: collapse;
+}
+
+thead, th, tfoot {
+     background-color: #CCC;
+}
+
+tr.rowodd {
+     background-color: #FFF;
+}
+
+tr.roweven, tr.rowodd > th {
+     background-color: #F2F2F2;
+}
+
+th.bookName, th.chapNumber {
+	text-align: right;
+}
+
+th.corner, th.title {
+	text-align: center;
+/*	background-color: #EEE;*/
+}
+
+th.corner {
+	border-top-style: none;
+}
+
+th.title {
+	border-bottom-style: none;
+}
+
+tr {
+	min-height: 2em;
+}
+
+td, th {
+     padding-top: 2px;
+     padding-right: 1px;
+     padding-left: 2px;
+     padding-bottom: 2px;
+     border: 1px solid #CCC;
+     position: relative;
+}
+
+.colthird {
+     border-right: 3px solid #CCC;
+}
+
+td {
+	min-width:2.4em;
+	font-size: 80%;
+	text-align: right;
+     z-index: 100;
+}
+
+.count {
+	display: block;
+}
+
+body {
+}
+
+/* jquery ui label extension which supports ticks and labels */
+.ui-spinner { width: 4em; }
+.ui-slider-anns { font-size: .7em; }
+
+/* --------------------------- */
+
+#wholeTool {
+	width: 100%;
+	max-width: 77em;
+	margin-left: auto;
+	margin-right: auto;
+}
+#bibleTable {
+     background-color: #CCC;
+	font-size: 70%;
+	font-family: Verdana,Arial,sans-serif;
+}
+
+#dateSliderContainer {
+	right:4em;
+	position: absolute;
+	margin-top: .2em;
+	margin-right: .2em;
+	margin-left: 17em;
+//	float:right;
+}
+
+#dateSlider {
+	font-size:97%;
+	height: 45em;
+}
+
+.byline {
+	margin: .5em 0px 0px 0px;
+	padding: 0px 0px 0px 0px;
+//	border-top: 1px solid #7F673C;
+	font-size: .8em;
+	font-weight: bold;
+	font-style: italic;
+}
+
+.msslistpopup {
+	min-width:11em;
+	max-height:300px;
+	overflow-x:visible;
+	overflow-y:auto;
+	padding:.5em;
+}
+
+.msslistpopup td {
+	padding-right:.2em;
+}
+
+
+
+	</style>
+
+
+</head>
+<body>
+	<div id="wholeTool">
+		<div id="dateSliderContainer" class="noprint">
+			<div id="dateSlider"></div>
+		</div>
+		<table id="bibleTable">
+			<thead id="bibleTableHeader"></thead>
+			<tbody id="bibleTableBody"></tbody>
+		</table>
+		<div style="clear: both;"></div>
+	</div>
+
+
+<script type="text/javascript">
+
+var books = [
+  {name : "Matthew", abbr : 'Matt', chapMax :  28},
+  {name : "Mark", abbr : 'Mark', chapMax :  16},
+  {name : "Luke", abbr : 'Luke', chapMax :  24},
+  {name : "John", abbr : 'John', chapMax :  21},
+  {name : "Acts", abbr : 'Acts', chapMax :  28},
+  {name : "Romans", abbr : 'Rom', chapMax :  16},
+  {name : "I Corinthians", abbr : '1Cor', chapMax :  16},
+  {name : "II Corinthians", abbr : '2Cor', chapMax :  13},
+  {name : "Galatians", abbr : 'Gal', chapMax :  6},
+  {name : "Ephesians", abbr : 'Eph', chapMax :  6},
+  {name : "Philippians", abbr : 'Philip', chapMax :  4},
+  {name : "Colossians", abbr : 'Col', chapMax :  4},
+  {name : "I Thessalonians", abbr : '1Thes', chapMax :  5},
+  {name : "II Thessalonians", abbr : '2Thes', chapMax :  3},
+  {name : "I Timothy", abbr : '1Tim', chapMax :  6},
+  {name : "II Timothy", abbr : '2Tim', chapMax :  4},
+  {name : "Titus", abbr : 'Titus', chapMax :  3},
+  {name : "Philemon", abbr : 'Phile', chapMax :  1},
+  {name : "Hebrews", abbr : 'Heb', chapMax :  13},
+  {name : "James", abbr : 'Jas', chapMax :  5},
+  {name : "I Peter", abbr : '1Pet', chapMax :  5},
+  {name : "II Peter", abbr : '2Pet', chapMax :  3},
+  {name : "I John", abbr : '1Jo', chapMax :  5},
+  {name : "II John", abbr : '2Jo', chapMax :  1},
+  {name : "III John", abbr : '3Jo', chapMax :  1},
+  {name : "Jude", abbr : 'Jude', chapMax :  1},
+  {name : "Revelation of John", abbr : 'Rev', chapMax :  22}
+];
+
+var DATEMIN = 50;
+var DATEMAX = 1850;
+var DATESTEP = 25;
+var dates = [];
+for (var i = DATEMIN; i <= DATEMAX; i += DATESTEP) dates[i] = ((!(i%100))?(DATEMAX-i+DATEMIN)+'CE':' ');
+
+var historicalEvents = [
+		[ 272, 'Constantine Born' ],
+		[ 306, 'Constantine Begins Reign' ],
+		[ 325, 'First Ecumenical Council (Nicaea)' ],
+		[ 381, 'Council of Constantinople I' ],
+		[ 431, 'Council of Ephesus' ],
+		[ 451, 'Council of Chalcedon' ],
+		[ 553, 'Council of Constantinople II' ],
+		[ 570, 'Birth of Muhammad' ],
+		[ 680, 'Council of Constantinople III' ],
+		[ 787, 'Council of Nicaea II' ],
+	];
+
+var chapMax = 0; for (i in books) { if (books[0].chapMax > chapMax) chapMax = books[0].chapMax; }
+var chapterData = [];
+
+
+
+function getCellDetails(cell) {
+	var id = $(cell).attr('id');
+	var vals = adv?$('#dateSlider').labeledslider('values'):[$('#dateSlider').labeledslider('value'), DATEMAX];
+	var maxDate = DATEMAX - vals[0]  + DATEMIN;
+	var minDate = DATEMAX - vals[1]  + DATEMIN;
+	var book = id.split('c')[0].substring(1);
+	var chapter = id.split('c')[1];
+	var t = '';
+	t += '<div class="msslistpopup">';
+	t += '<table style="width:100%;">';
+	t += '<thead><tr><th style="text-align:right;">Witness</th><th style="text-align:right;">Year</th></tr></thead>';
+	t += '<tbody>';
+	for (var wi = 0; wi < chapterData[book][chapter].length; ++wi) {
+		var w = chapterData[book][chapter][wi];
+		if (w.yravg >= minDate) {
+			if (w.yravg <= maxDate && w.yravg >= minDate) {
+				t += '<tr><td>';
+				t += '<a target="_blank" href="http://ntvmr.uni-muenster.de/manuscript-workspace?docid='+w.docid+'&biblicalContent='+books[book-1].abbr+'.'+chapter+'&searchType=pages">'+w.ganum+'</a>';
+				t += '</td><td>'+w.yravg+'</td></tr>';
+			}
+			else break;
+		}
+	}
+	t += '</tbody></table>';
+	t += '</div>';
+	return t;
+}
+
+
+function buildTable() {
+	var t = '<tr><th class="title" colspan="'+(chapMax+1)+'">Surviving Manuscripts <span id="dateLabel">&nbsp;</span></th></tr>';
+	$('#bibleTableHeader').html(t);
+	t = '<tr><th class="corner">Book / Chapter</th>';
+	for (var i = 1; i <= chapMax; ++i) { t+= '<th class="chapNumber">' + i + '</th>'; }
+	t += '</tr>';
+	for (var b = 0; b < books.length; ++b) {
+		t += '<tr class="row'+(b%2?'odd':'even')+'"><th class="bookName">'+books[b].name+'</th>';
+		for (var c = 1; c <= books[b].chapMax; ++c) {
+			t += '<td class="col'+(c%3?'nonthird':'third')+'" title="" id="b'+(1+b)+'c'+c+'">';
+			t += '<span class="count">&nbsp;</span> &nbsp;';
+			t += '</td>';
+		}
+		t += '</tr>';
+	}
+	$('#bibleTableBody').html(t);
+
+	$('#bibleTableBody').find('td').qtip({
+		content  : { text: function(event, api) { return getCellDetails(this); } },
+		position : { viewport: $(window) },
+		style    : 'qtip-wiki',
+		show     : { solo: true },
+		hide     : { fixed: true, delay: 700 }
+	});
+}
+
+
+function refreshTable(vals, callback) {
+	if (!vals) vals = adv?$('#dateSlider').labeledslider('values'):[$('#dateSlider').labeledslider('value'), DATEMAX];
+	var maxDate = DATEMAX - vals[0]  + DATEMIN;
+	var minDate = DATEMAX - vals[1]  + DATEMIN;
+	if (adv)	$('#dateLabel').html('Between ' + minDate + 'CE and ' + maxDate + 'CE');
+	else		$('#dateLabel').html('From Before ' + maxDate + 'CE');
+	var bookDataLength = chapterData.length;
+	for (var b = 1; b < bookDataLength; ++b) {
+		var chapter = chapterData[b];
+		var chapterLength = chapter.length;
+		for (var c = 1; c < chapterLength; ++c) {
+			var count = 0;
+			var oldest = false;
+			var multipleOldest = false;
+			var witnesses = chapter[c];
+			var witnessesLength = witnesses.length;
+			for (var wi = 0; wi < witnessesLength; ++wi) {
+				var w = witnesses[wi];
+				if (w.yravg >= minDate) {
+					if (w.yravg <= maxDate && w.yravg >= minDate) {
+						if (!oldest || w.yravg < oldest.yravg) { oldest = w; multipleOldest = false; }
+						else if (oldest && w.yravg == oldest.yravg) { multipleOldest = true; if (w.docid < oldest.docid) oldest = w; }
+						++count;
+					}
+					else break;	// only break if we're over max; not if we're under min
+				}
+			}
+			var oldestGA = (!oldest) ? '&nbsp;':('<a target="_blank" href="http://ntvmr.uni-muenster.de/manuscript-workspace?docid='+oldest.docid+'&biblicalContent='+books[b-1].abbr+'.'+c+'&searchType=pages">'+oldest.ganum+(multipleOldest?'+':'')+'</a>');
+			$('#b'+b+'c'+c).html('<span class="count">' + count + '</span> ' + oldestGA);
+		}
+	}
+	if (callback) callback();
+}
+	
+
+
+function loadData(callback) {
+	$.blockUI({ message: '<h2><img src="rb/loading.gif" /> Loading data from INTF, please wait...</h2>' });
+	$.get('http://ntvmr.uni-muenster.de/community/vmr/api/statistics/chaptercoverage/', function(xml) {
+		var book = 0;
+		var chapter = 0;
+		chapterData = [];
+		$(xml).find('ChapterCoverage').children('b').each(function() {
+			book = $(this).attr('n');
+			chapterData[book] = [];
+			$(this).children('c').each(function() {
+				chapter = $(this).attr('n');
+				chapterData[book][chapter] = [];
+				var ws = $(this).children('w').each(function() {
+					var ganum = $(this).attr('ga').replace(/\([^)]*\)/g, '');
+					chapterData[book][chapter].push( {
+						docid : $(this).attr('di'),
+						ganum : ganum,
+						yravg : $(this).attr('yravg')
+					});
+				});
+				chapterData[book][chapter].sort(function(o1, o2) { return (o1.yravg == o2.yravg) ? o1.docid - o2.docid : o1.yravg - o2.yravg; });
+			});
+		});
+		$.unblockUI();
+		if (callback) callback();
+	});
+}
+
+var adv = false;
+$(document).ready(function() {
+	adv = window.location.href.indexOf('/adv') > 0;
+	adv = true;	// force true for now
+	$('#dateSlider').labeledslider({ max: DATEMAX, min: DATEMIN, step: DATESTEP, orientation: 'vertical', range: adv ? true : 'max' });
+	$('#dateSlider').labeledslider( 'option', 'tickLabels', dates );
+	$('#dateSlider').labeledslider( 'option', 'tickAnnotations', historicalEvents );
+	$('#dateSlider').labeledslider( 'option', 'value'+(adv?'s':''), (adv)?[DATEMAX + DATEMIN - 900, DATEMAX  ]:(DATEMAX + DATEMIN - 900));
+	$('#dateSlider').labeledslider( 'option', 'slide', function(event, ui) {
+		refreshTable(adv?ui.values:[ui.value, DATEMAX]);
+	});
+
+	buildTable();
+	loadData(function() {
+		refreshTable();
+	});
+});
+
+</script>
+</body>

Added: trunk/webapp/rb/index.jsp
===================================================================
--- trunk/webapp/rb/index.jsp	                        (rev 0)
+++ trunk/webapp/rb/index.jsp	2017-08-19 17:56:21 UTC (rev 442)
@@ -0,0 +1,45 @@
+<%@ page
+    language="java"
+    contentType="text/html;charset=utf-8"
+%>
+<%@ include file="../init.jsp" %>
+
+<tiles:insert beanName="basic" flush="true" >
+	<tiles:put name="title" value="Historical Surviving Greek Manuscript Coverage" />
+	<tiles:put name="pintro" type="string" ><div></div></tiles:put>
+
+	<tiles:put name="sidebar_left" type="string">
+	</tiles:put>
+
+	<tiles:put name="sidebar_right" type="string">
+	</tiles:put>
+
+	<tiles:put name="content" type="string">
+
+<style>
+#content-sub-1 {
+	display:none;
+}
+#content-sub-2 {
+	display:none;
+	width:16em;
+}
+#printer {
+	width:initial;
+}
+
+</style>
+
+<%@ include file="body.html" %>
+
+
+	</tiles:put>
+
+	<tiles:put name="extra_footer" type="string">
+		<div class="byline">
+			Greek New Testament manuscripts. Not exhaustive; showing manuscripts with INTF verse index data. Data courtesy of <a href="http://ntvmr.uni-muenster.de">The Institut für Neutestamentliche Textforschung</a>
+			<br/>
+			Dates shown are an average of the earlest and latest estimates from the Institut für Neutestamentliche Textforschung.
+		</div>
+	</tiles:put>
+</tiles:insert>

Added: trunk/webapp/rb/jquery.blockUI.js
===================================================================
--- trunk/webapp/rb/jquery.blockUI.js	                        (rev 0)
+++ trunk/webapp/rb/jquery.blockUI.js	2017-08-19 17:56:21 UTC (rev 442)
@@ -0,0 +1,576 @@
+/*!
+ * jQuery blockUI plugin
+ * Version 2.57.0-2013.02.17
+ * @requires jQuery v1.7 or later
+ *
+ * Examples at: http://malsup.com/jquery/block/
+ * Copyright (c) 2007-2013 M. Alsup
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * Thanks to Amir-Hossein Sobhi for some excellent contributions!
+ */
+
+;(function() {
+/*jshint eqeqeq:false curly:false latedef:false */
+"use strict";
+
+	function setup($) {
+		$.fn._fadeIn = $.fn.fadeIn;
+
+		var noOp = $.noop || function() {};
+
+		// this bit is to ensure we don't call setExpression when we shouldn't (with extra muscle to handle
+		// retarded userAgent strings on Vista)
+		var msie = /MSIE/.test(navigator.userAgent);
+		var ie6  = /MSIE 6.0/.test(navigator.userAgent) && ! /MSIE 8.0/.test(navigator.userAgent);
+		var mode = document.documentMode || 0;
+		// var setExpr = msie && (($.browser.version < 8 && !mode) || mode < 8);
+		var setExpr = $.isFunction( document.createElement('div').style.setExpression );
+
+		// global $ methods for blocking/unblocking the entire page
+		$.blockUI   = function(opts) { install(window, opts); };
+		$.unblockUI = function(opts) { remove(window, opts); };
+
+		// convenience method for quick growl-like notifications  (http://www.google.com/search?q=growl)
+		$.growlUI = function(title, message, timeout, onClose) {
+			var $m = $('<div class="growlUI"></div>');
+			if (title) $m.append('<h1>'+title+'</h1>');
+			if (message) $m.append('<h2>'+message+'</h2>');
+			if (timeout === undefined) timeout = 3000;
+			$.blockUI({
+				message: $m, fadeIn: 700, fadeOut: 1000, centerY: false,
+				timeout: timeout, showOverlay: false,
+				onUnblock: onClose,
+				css: $.blockUI.defaults.growlCSS
+			});
+		};
+
+		// plugin method for blocking element content
+		$.fn.block = function(opts) {
+			var fullOpts = $.extend({}, $.blockUI.defaults, opts || {});
+			this.each(function() {
+				var $el = $(this);
+				if (fullOpts.ignoreIfBlocked && $el.data('blockUI.isBlocked'))
+					return;
+				$el.unblock({ fadeOut: 0 });
+			});
+
+			return this.each(function() {
+				if ($.css(this,'position') == 'static') {
+					this.style.position = 'relative';
+					$(this).data('blockUI.static', true);
+				}
+				this.style.zoom = 1; // force 'hasLayout' in ie
+				install(this, opts);
+			});
+		};
+
+		// plugin method for unblocking element content
+		$.fn.unblock = function(opts) {
+			return this.each(function() {
+				remove(this, opts);
+			});
+		};
+
+		$.blockUI.version = 2.57; // 2nd generation blocking at no extra cost!
+
+		// override these in your code to change the default behavior and style
+		$.blockUI.defaults = {
+			// message displayed when blocking (use null for no message)
+			message:  '<h1>Please wait...</h1>',
+
+			title: null,		// title string; only used when theme == true
+			draggable: true,	// only used when theme == true (requires jquery-ui.js to be loaded)
+
+			theme: false, // set to true to use with jQuery UI themes
+
+			// styles for the message when blocking; if you wish to disable
+			// these and use an external stylesheet then do this in your code:
+			// $.blockUI.defaults.css = {};
+			css: {
+				padding:	0,
+				margin:		0,
+				width:		'30%',
+				top:		'40%',
+				left:		'35%',
+				textAlign:	'center',
+				color:		'#000',
+				border:		'3px solid #aaa',
+				backgroundColor:'#fff',
+				cursor:		'wait'
+			},
+
+			// minimal style set used when themes are used
+			themedCSS: {
+				width:	'30%',
+				top:	'40%',
+				left:	'35%'
+			},
+
+			// styles for the overlay
+			overlayCSS:  {
+				backgroundColor:	'#000',
+				opacity:			0.6,
+				cursor:				'wait'
+			},
+
+			// style to replace wait cursor before unblocking to correct issue
+			// of lingering wait cursor
+			cursorReset: 'default',
+
+			// styles applied when using $.growlUI
+			growlCSS: {
+				width:		'350px',
+				top:		'10px',
+				left:		'',
+				right:		'10px',
+				border:		'none',
+				padding:	'5px',
+				opacity:	0.6,
+				cursor:		'default',
+				color:		'#fff',
+				backgroundColor: '#000',
+				'-webkit-border-radius':'10px',
+				'-moz-border-radius':	'10px',
+				'border-radius':		'10px'
+			},
+
+			// IE issues: 'about:blank' fails on HTTPS and javascript:false is s-l-o-w
+			// (hat tip to Jorge H. N. de Vasconcelos)
+			/*jshint scripturl:true */
+			iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank',
+
+			// force usage of iframe in non-IE browsers (handy for blocking applets)
+			forceIframe: false,
+
+			// z-index for the blocking overlay
+			baseZ: 1000,
+
+			// set these to true to have the message automatically centered
+			centerX: true, // <-- only effects element blocking (page block controlled via css above)
+			centerY: true,
+
+			// allow body element to be stetched in ie6; this makes blocking look better
+			// on "short" pages.  disable if you wish to prevent changes to the body height
+			allowBodyStretch: true,
+
+			// enable if you want key and mouse events to be disabled for content that is blocked
+			bindEvents: true,
+
+			// be default blockUI will supress tab navigation from leaving blocking content
+			// (if bindEvents is true)
+			constrainTabKey: true,
+
+			// fadeIn time in millis; set to 0 to disable fadeIn on block
+			fadeIn:  200,
+
+			// fadeOut time in millis; set to 0 to disable fadeOut on unblock
+			fadeOut:  400,
+
+			// time in millis to wait before auto-unblocking; set to 0 to disable auto-unblock
+			timeout: 0,
+
+			// disable if you don't want to show the overlay
+			showOverlay: true,
+
+			// if true, focus will be placed in the first available input field when
+			// page blocking
+			focusInput: true,
+
+			// suppresses the use of overlay styles on FF/Linux (due to performance issues with opacity)
+			// no longer needed in 2012
+			// applyPlatformOpacityRules: true,
+
+			// callback method invoked when fadeIn has completed and blocking message is visible
+			onBlock: null,
+
+			// callback method invoked when unblocking has completed; the callback is
+			// passed the element that has been unblocked (which is the window object for page
+			// blocks) and the options that were passed to the unblock call:
+			//	onUnblock(element, options)
+			onUnblock: null,
+
+			// callback method invoked when the overlay area is clicked.
+			// setting this will turn the cursor to a pointer, otherwise cursor defined in overlayCss will be used.
+			onOverlayClick: null,
+
+			// don't ask; if you really must know: http://groups.google.com/group/jquery-en/browse_thread/thread/36640a8730503595/2f6a79a77a78e493#2f6a79a77a78e493
+			quirksmodeOffsetHack: 4,
+
+			// class name of the message block
+			blockMsgClass: 'blockMsg',
+
+			// if it is already blocked, then ignore it (don't unblock and reblock)
+			ignoreIfBlocked: false
+		};
+
+		// private data and functions follow...
+
+		var pageBlock = null;
+		var pageBlockEls = [];
+
+		function install(el, opts) {
+			var css, themedCSS;
+			var full = (el == window);
+			var msg = (opts && opts.message !== undefined ? opts.message : undefined);
+			opts = $.extend({}, $.blockUI.defaults, opts || {});
+
+			if (opts.ignoreIfBlocked && $(el).data('blockUI.isBlocked'))
+				return;
+
+			opts.overlayCSS = $.extend({}, $.blockUI.defaults.overlayCSS, opts.overlayCSS || {});
+			css = $.extend({}, $.blockUI.defaults.css, opts.css || {});
+			if (opts.onOverlayClick)
+				opts.overlayCSS.cursor = 'pointer';
+
+			themedCSS = $.extend({}, $.blockUI.defaults.themedCSS, opts.themedCSS || {});
+			msg = msg === undefined ? opts.message : msg;
+
+			// remove the current block (if there is one)
+			if (full && pageBlock)
+				remove(window, {fadeOut:0});
+
+			// if an existing element is being used as the blocking content then we capture
+			// its current place in the DOM (and current display style) so we can restore
+			// it when we unblock
+			if (msg && typeof msg != 'string' && (msg.parentNode || msg.jquery)) {
+				var node = msg.jquery ? msg[0] : msg;
+				var data = {};
+				$(el).data('blockUI.history', data);
+				data.el = node;
+				data.parent = node.parentNode;
+				data.display = node.style.display;
+				data.position = node.style.position;
+				if (data.parent)
+					data.parent.removeChild(node);
+			}
+
+			$(el).data('blockUI.onUnblock', opts.onUnblock);
+			var z = opts.baseZ;
+
+			// blockUI uses 3 layers for blocking, for simplicity they are all used on every platform;
+			// layer1 is the iframe layer which is used to supress bleed through of underlying content
+			// layer2 is the overlay layer which has opacity and a wait cursor (by default)
+			// layer3 is the message content that is displayed while blocking
+			var lyr1, lyr2, lyr3, s;
+			if (msie || opts.forceIframe)
+				lyr1 = $('<iframe class="blockUI" style="z-index:'+ (z++) +';display:none;border:none;margin:0;padding:0;position:absolute;width:100%;height:100%;top:0;left:0" src="'+opts.iframeSrc+'"></iframe>');
+			else
+				lyr1 = $('<div class="blockUI" style="display:none"></div>');
+
+			if (opts.theme)
+				lyr2 = $('<div class="blockUI blockOverlay ui-widget-overlay" style="z-index:'+ (z++) +';display:none"></div>');
+			else
+				lyr2 = $('<div class="blockUI blockOverlay" style="z-index:'+ (z++) +';display:none;border:none;margin:0;padding:0;width:100%;height:100%;top:0;left:0"></div>');
+
+			if (opts.theme && full) {
+				s = '<div class="blockUI ' + opts.blockMsgClass + ' blockPage ui-dialog ui-widget ui-corner-all" style="z-index:'+(z+10)+';display:none;position:fixed">';
+				if ( opts.title ) {
+					s += '<div class="ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle">'+(opts.title || '&nbsp;')+'</div>';
+				}
+				s += '<div class="ui-widget-content ui-dialog-content"></div>';
+				s += '</div>';
+			}
+			else if (opts.theme) {
+				s = '<div class="blockUI ' + opts.blockMsgClass + ' blockElement ui-dialog ui-widget ui-corner-all" style="z-index:'+(z+10)+';display:none;position:absolute">';
+				if ( opts.title ) {
+					s += '<div class="ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle">'+(opts.title || '&nbsp;')+'</div>';
+				}  
+				s += '<div class="ui-widget-content ui-dialog-content"></div>';
+				s += '</div>';
+			}
+			else if (full) {
+				s = '<div class="blockUI ' + opts.blockMsgClass + ' blockPage" style="z-index:'+(z+10)+';display:none;position:fixed"></div>';
+			}
+			else {
+				s = '<div class="blockUI ' + opts.blockMsgClass + ' blockElement" style="z-index:'+(z+10)+';display:none;position:absolute"></div>';
+			}
+			lyr3 = $(s);
+
+			// if we have a message, style it
+			if (msg) {
+				if (opts.theme) {
+					lyr3.css(themedCSS);
+					lyr3.addClass('ui-widget-content');
+				}
+				else
+					lyr3.css(css);
+			}
+
+			// style the overlay
+			if (!opts.theme /*&& (!opts.applyPlatformOpacityRules)*/)
+				lyr2.css(opts.overlayCSS);
+			lyr2.css('position', full ? 'fixed' : 'absolute');
+
+			// make iframe layer transparent in IE
+			if (msie || opts.forceIframe)
+				lyr1.css('opacity',0.0);
+
+			//$([lyr1[0],lyr2[0],lyr3[0]]).appendTo(full ? 'body' : el);
+			var layers = [lyr1,lyr2,lyr3], $par = full ? $('body') : $(el);
+			$.each(layers, function() {
+				this.appendTo($par);
+			});
+
+			if (opts.theme && opts.draggable && $.fn.draggable) {
+				lyr3.draggable({
+					handle: '.ui-dialog-titlebar',
+					cancel: 'li'
+				});
+			}
+
+			// ie7 must use absolute positioning in quirks mode and to account for activex issues (when scrolling)
+			var expr = setExpr && (!$.support.boxModel || $('object,embed', full ? null : el).length > 0);
+			if (ie6 || expr) {
+				// give body 100% height
+				if (full && opts.allowBodyStretch && $.support.boxModel)
+					$('html,body').css('height','100%');
+
+				// fix ie6 issue when blocked element has a border width
+				if ((ie6 || !$.support.boxModel) && !full) {
+					var t = sz(el,'borderTopWidth'), l = sz(el,'borderLeftWidth');
+					var fixT = t ? '(0 - '+t+')' : 0;
+					var fixL = l ? '(0 - '+l+')' : 0;
+				}
+
+				// simulate fixed position
+				$.each(layers, function(i,o) {
+					var s = o[0].style;
+					s.position = 'absolute';
+					if (i < 2) {
+						if (full)
+							s.setExpression('height','Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.support.boxModel?0:'+opts.quirksmodeOffsetHack+') + "px"');
+						else
+							s.setExpression('height','this.parentNode.offsetHeight + "px"');
+						if (full)
+							s.setExpression('width','jQuery.support.boxModel && document.documentElement.clientWidth || document.body.clientWidth + "px"');
+						else
+							s.setExpression('width','this.parentNode.offsetWidth + "px"');
+						if (fixL) s.setExpression('left', fixL);
+						if (fixT) s.setExpression('top', fixT);
+					}
+					else if (opts.centerY) {
+						if (full) s.setExpression('top','(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"');
+						s.marginTop = 0;
+					}
+					else if (!opts.centerY && full) {
+						var top = (opts.css && opts.css.top) ? parseInt(opts.css.top, 10) : 0;
+						var expression = '((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + '+top+') + "px"';
+						s.setExpression('top',expression);
+					}
+				});
+			}
+
+			// show the message
+			if (msg) {
+				if (opts.theme)
+					lyr3.find('.ui-widget-content').append(msg);
+				else
+					lyr3.append(msg);
+				if (msg.jquery || msg.nodeType)
+					$(msg).show();
+			}
+
+			if ((msie || opts.forceIframe) && opts.showOverlay)
+				lyr1.show(); // opacity is zero
+			if (opts.fadeIn) {
+				var cb = opts.onBlock ? opts.onBlock : noOp;
+				var cb1 = (opts.showOverlay && !msg) ? cb : noOp;
+				var cb2 = msg ? cb : noOp;
+				if (opts.showOverlay)
+					lyr2._fadeIn(opts.fadeIn, cb1);
+				if (msg)
+					lyr3._fadeIn(opts.fadeIn, cb2);
+			}
+			else {
+				if (opts.showOverlay)
+					lyr2.show();
+				if (msg)
+					lyr3.show();
+				if (opts.onBlock)
+					opts.onBlock();
+			}
+
+			// bind key and mouse events
+			bind(1, el, opts);
+
+			if (full) {
+				pageBlock = lyr3[0];
+				pageBlockEls = $(':input:enabled:visible',pageBlock);
+				if (opts.focusInput)
+					setTimeout(focus, 20);
+			}
+			else
+				center(lyr3[0], opts.centerX, opts.centerY);
+
+			if (opts.timeout) {
+				// auto-unblock
+				var to = setTimeout(function() {
+					if (full)
+						$.unblockUI(opts);
+					else
+						$(el).unblock(opts);
+				}, opts.timeout);
+				$(el).data('blockUI.timeout', to);
+			}
+		}
+
+		// remove the block
+		function remove(el, opts) {
+			var full = (el == window);
+			var $el = $(el);
+			var data = $el.data('blockUI.history');
+			var to = $el.data('blockUI.timeout');
+			if (to) {
+				clearTimeout(to);
+				$el.removeData('blockUI.timeout');
+			}
+			opts = $.extend({}, $.blockUI.defaults, opts || {});
+			bind(0, el, opts); // unbind events
+
+			if (opts.onUnblock === null) {
+				opts.onUnblock = $el.data('blockUI.onUnblock');
+				$el.removeData('blockUI.onUnblock');
+			}
+
+			var els;
+			if (full) // crazy selector to handle odd field errors in ie6/7
+				els = $('body').children().filter('.blockUI').add('body > .blockUI');
+			else
+				els = $el.find('>.blockUI');
+
+			// fix cursor issue
+			if ( opts.cursorReset ) {
+				if ( els.length > 1 )
+					els[1].style.cursor = opts.cursorReset;
+				if ( els.length > 2 )
+					els[2].style.cursor = opts.cursorReset;
+			}
+
+			if (full)
+				pageBlock = pageBlockEls = null;
+
+			if (opts.fadeOut) {
+				els.fadeOut(opts.fadeOut);
+				setTimeout(function() { reset(els,data,opts,el); }, opts.fadeOut);
+			}
+			else
+				reset(els, data, opts, el);
+		}
+
+		// move blocking element back into the DOM where it started
+		function reset(els,data,opts,el) {
+			var $el = $(el);
+			els.each(function(i,o) {
+				// remove via DOM calls so we don't lose event handlers
+				if (this.parentNode)
+					this.parentNode.removeChild(this);
+			});
+
+			if (data && data.el) {
+				data.el.style.display = data.display;
+				data.el.style.position = data.position;
+				if (data.parent)
+					data.parent.appendChild(data.el);
+				$el.removeData('blockUI.history');
+			}
+
+			if ($el.data('blockUI.static')) {
+				$el.css('position', 'static'); // #22
+			}
+
+			if (typeof opts.onUnblock == 'function')
+				opts.onUnblock(el,opts);
+
+			// fix issue in Safari 6 where block artifacts remain until reflow
+			var body = $(document.body), w = body.width(), cssW = body[0].style.width;
+			body.width(w-1).width(w);
+			body[0].style.width = cssW;
+		}
+
+		// bind/unbind the handler
+		function bind(b, el, opts) {
+			var full = el == window, $el = $(el);
+
+			// don't bother unbinding if there is nothing to unbind
+			if (!b && (full && !pageBlock || !full && !$el.data('blockUI.isBlocked')))
+				return;
+
+			$el.data('blockUI.isBlocked', b);
+
+			// don't bind events when overlay is not in use or if bindEvents is false
+			if (!opts.bindEvents || (b && !opts.showOverlay))
+				return;
+
+			// bind anchors and inputs for mouse and key events
+			var events = 'mousedown mouseup keydown keypress keyup touchstart touchend touchmove';
+			if (b)
+				$(document).bind(events, opts, handler);
+			else
+				$(document).unbind(events, handler);
+
+		// former impl...
+		//		var $e = $('a,:input');
+		//		b ? $e.bind(events, opts, handler) : $e.unbind(events, handler);
+		}
+
+		// event handler to suppress keyboard/mouse events when blocking
+		function handler(e) {
+			// allow tab navigation (conditionally)
+			if (e.keyCode && e.keyCode == 9) {
+				if (pageBlock && e.data.constrainTabKey) {
+					var els = pageBlockEls;
+					var fwd = !e.shiftKey && e.target === els[els.length-1];
+					var back = e.shiftKey && e.target === els[0];
+					if (fwd || back) {
+						setTimeout(function(){focus(back);},10);
+						return false;
+					}
+				}
+			}
+			var opts = e.data;
+			var target = $(e.target);
+			if (target.hasClass('blockOverlay') && opts.onOverlayClick)
+				opts.onOverlayClick();
+
+			// allow events within the message content
+			if (target.parents('div.' + opts.blockMsgClass).length > 0)
+				return true;
+
+			// allow events for content that is not being blocked
+			return target.parents().children().filter('div.blockUI').length === 0;
+		}
+
+		function focus(back) {
+			if (!pageBlockEls)
+				return;
+			var e = pageBlockEls[back===true ? pageBlockEls.length-1 : 0];
+			if (e)
+				e.focus();
+		}
+
+		function center(el, x, y) {
+			var p = el.parentNode, s = el.style;
+			var l = ((p.offsetWidth - el.offsetWidth)/2) - sz(p,'borderLeftWidth');
+			var t = ((p.offsetHeight - el.offsetHeight)/2) - sz(p,'borderTopWidth');
+			if (x) s.left = l > 0 ? (l+'px') : '0';
+			if (y) s.top  = t > 0 ? (t+'px') : '0';
+		}
+
+		function sz(el, p) {
+			return parseInt($.css(el,p),10)||0;
+		}
+
+	}
+
+
+	/*global define:true */
+	if (typeof define === 'function' && define.amd && define.amd.jQuery) {
+		define(['jquery'], setup);
+	} else {
+		setup(jQuery);
+	}
+
+})();

Added: trunk/webapp/rb/jquery.qtip.min.css
===================================================================
--- trunk/webapp/rb/jquery.qtip.min.css	                        (rev 0)
+++ trunk/webapp/rb/jquery.qtip.min.css	2017-08-19 17:56:21 UTC (rev 442)
@@ -0,0 +1,2 @@
+/* qTip2 v2.2.0 basic css3 | qtip2.com | Licensed MIT, GPL | Thu Nov 21 2013 20:35:00 */
+.qtip{position:absolute;left:-28000px;top:-28000px;display:none;max-width:280px;min-width:50px;font-size:10.5px;line-height:12px;direction:ltr;box-shadow:none;padding:0}.qtip-content{position:relative;padding:5px 9px;overflow:hidden;text-align:left;word-wrap:break-word}.qtip-titlebar{position:relative;padding:5px 35px 5px 10px;overflow:hidden;border-width:0 0 1px;font-weight:700}.qtip-titlebar+.qtip-content{border-top-width:0!important}.qtip-close{position:absolute;right:-9px;top:-9px;cursor:pointer;outline:medium none;border-width:1px;border-style:solid;border-color:transparent}.qtip-titlebar .qtip-close{right:4px;top:50%;margin-top:-9px}* html .qtip-titlebar .qtip-close{top:16px}.qtip-titlebar .ui-icon,.qtip-icon .ui-icon{display:block;text-indent:-1000em;direction:ltr}.qtip-icon,.qtip-icon .ui-icon{-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;text-decoration:none}.qtip-icon .ui-icon{width:18px;height:14px;line-height:14px;text-align:center;text-indent:0;font:400 bold 10px/13px Tahoma,sans-serif;color:inherit;background:transparent none no-repeat -100em -100em}.qtip-focus{}.qtip-hover{}.qtip-default{border-width:1px;border-style:solid;border-color:#F1D031;background-color:#FFFFA3;color:#555}.qtip-default .qtip-titlebar{background-color:#FFEF93}.qtip-default .qtip-icon{border-color:#CCC;background:#F1F1F1;color:#777}.qtip-default .qtip-titlebar .qtip-close{border-color:#AAA;color:#111} .qtip-light{background-color:#fff;border-color:#E2E2E2;color:#454545}.qtip-light .qtip-titlebar{background-color:#f1f1f1} .qtip-dark{background-color:#505050;border-color:#303030;color:#f3f3f3}.qtip-dark .qtip-titlebar{background-color:#404040}.qtip-dark .qtip-icon{border-color:#444}.qtip-dark .qtip-titlebar .ui-state-hover{border-color:#303030} .qtip-cream{background-color:#FBF7AA;border-color:#F9E98E;color:#A27D35}.qtip-cream .qtip-titlebar{background-color:#F0DE7D}.qtip-cream .qtip-close .qtip-icon{background-position:-82px 0} .qtip-red{background-color:#F78B83;border-color:#D95252;color:#912323}.qtip-red .qtip-titlebar{background-color:#F06D65}.qtip-red .qtip-close .qtip-icon{background-position:-102px 0}.qtip-red .qtip-icon{border-color:#D95252}.qtip-red .qtip-titlebar .ui-state-hover{border-color:#D95252} .qtip-green{background-color:#CAED9E;border-color:#90D93F;color:#3F6219}.qtip-green .qtip-titlebar{background-color:#B0DE78}.qtip-green .qtip-close .qtip-icon{background-position:-42px 0} .qtip-blue{background-color:#E5F6FE;border-color:#ADD9ED;color:#5E99BD}.qtip-blue .qtip-titlebar{background-color:#D0E9F5}.qtip-blue .qtip-close .qtip-icon{background-position:-2px 0}.qtip-shadow{-webkit-box-shadow:1px 1px 3px 1px rgba(0,0,0,.15);-moz-box-shadow:1px 1px 3px 1px rgba(0,0,0,.15);box-shadow:1px 1px 3px 1px rgba(0,0,0,.15)}.qtip-rounded,.qtip-tipsy,.qtip-bootstrap{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.qtip-rounded .qtip-titlebar{-moz-border-radius:4px 4px 0 0;-webkit-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.qtip-youtube{-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 0 3px #333;-moz-box-shadow:0 0 3px #333;box-shadow:0 0 3px #333;color:#fff;border-width:0;background:#4A4A4A;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#4A4A4A),color-stop(100%,#000));background-image:-webkit-linear-gradient(top,#4A4A4A 0,#000 100%);background-image:-moz-linear-gradient(top,#4A4A4A 0,#000 100%);background-image:-ms-linear-gradient(top,#4A4A4A 0,#000 100%);background-image:-o-linear-gradient(top,#4A4A4A 0,#000 100%)}.qtip-youtube .qtip-titlebar{background-color:#4A4A4A;background-color:rgba(0,0,0,0)}.qtip-youtube .qtip-content{padding:.75em;font:12px arial,sans-serif;filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr=#4a4a4a, EndColorStr=#000000);-ms-filter:"progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr=#4a4a4a, EndColorStr=#000000);"}.qtip-youtube .qtip-icon{border-color:#222}.qtip-youtube .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-jtools{background:#232323;background:rgba(0,0,0,.7);background-image:-webkit-gradient(linear,left top,left bottom,from(#717171),to(#232323));background-image:-moz-linear-gradient(top,#717171,#232323);background-image:-webkit-linear-gradient(top,#717171,#232323);background-image:-ms-linear-gradient(top,#717171,#232323);background-image:-o-linear-gradient(top,#717171,#232323);border:2px solid #ddd;border:2px solid rgba(241,241,241,1);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 0 12px #333;-moz-box-shadow:0 0 12px #333;box-shadow:0 0 12px #333}.qtip-jtools .qtip-titlebar{background-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171, endColorstr=#4A4A4A);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171, endColorstr=#4A4A4A)"}.qtip-jtools .qtip-content{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A, endColorstr=#232323);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A, endColorstr=#232323)"}.qtip-jtools .qtip-titlebar,.qtip-jtools .qtip-content{background:transparent;color:#fff;border:0 dashed transparent}.qtip-jtools .qtip-icon{border-color:#555}.qtip-jtools .qtip-titlebar .ui-state-hover{border-color:#333}.qtip-cluetip{-webkit-box-shadow:4px 4px 5px rgba(0,0,0,.4);-moz-box-shadow:4px 4px 5px rgba(0,0,0,.4);box-shadow:4px 4px 5px rgba(0,0,0,.4);background-color:#D9D9C2;color:#111;border:0 dashed transparent}.qtip-cluetip .qtip-titlebar{background-color:#87876A;color:#fff;border:0 dashed transparent}.qtip-cluetip .qtip-icon{border-color:#808064}.qtip-cluetip .qtip-titlebar .ui-state-hover{border-color:#696952;color:#696952}.qtip-tipsy{background:#000;background:rgba(0,0,0,.87);color:#fff;border:0 solid transparent;font-size:11px;font-family:'Lucida Grande',sans-serif;font-weight:700;line-height:16px;text-shadow:0 1px #000}.qtip-tipsy .qtip-titlebar{padding:6px 35px 0 10px;background-color:transparent}.qtip-tipsy .qtip-content{padding:6px 10px}.qtip-tipsy .qtip-icon{border-color:#222;text-shadow:none}.qtip-tipsy .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-tipped{border:3px solid #959FA9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background-color:#F9F9F9;color:#454545;font-weight:400;font-family:serif}.qtip-tipped .qtip-titlebar{border-bottom-width:0;color:#fff;background:#3A79B8;background-image:-webkit-gradient(linear,left top,left bottom,from(#3A79B8),to(#2E629D));background-image:-webkit-linear-gradient(top,#3A79B8,#2E629D);background-image:-moz-linear-gradient(top,#3A79B8,#2E629D);background-image:-ms-linear-gradient(top,#3A79B8,#2E629D);background-image:-o-linear-gradient(top,#3A79B8,#2E629D);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8, endColorstr=#2E629D);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8, endColorstr=#2E629D)"}.qtip-tipped .qtip-icon{border:2px solid #285589;background:#285589}.qtip-tipped .qtip-icon .ui-icon{background-color:#FBFBFB;color:#555}.qtip-bootstrap{font-size:14px;line-height:20px;color:#333;padding:1px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.qtip-bootstrap .qtip-titlebar{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.qtip-bootstrap .qtip-titlebar .qtip-close{right:11px;top:45%;border-style:none}.qtip-bootstrap .qtip-content{padding:9px 14px}.qtip-bootstrap .qtip-icon{background:transparent}.qtip-bootstrap .qtip-icon .ui-icon{width:auto;height:auto;float:right;font-size:20px;font-weight:700;line-height:18px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.qtip-bootstrap .qtip-icon .ui-icon:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}.qtip:not(.ie9haxors) div.qtip-content,.qtip:not(.ie9haxors) div.qtip-titlebar{filter:none;-ms-filter:none}.qtip .qtip-tip{margin:0 auto;overflow:hidden;z-index:10}x:-o-prefocus,.qtip .qtip-tip{visibility:hidden}.qtip .qtip-tip,.qtip .qtip-tip .qtip-vml,.qtip .qtip-tip canvas{position:absolute;color:#123456;background:transparent;border:0 dashed transparent}.qtip .qtip-tip canvas{top:0;left:0}.qtip .qtip-tip .qtip-vml{behavior:url(#default#VML);display:inline-block;visibility:visible}#qtip-overlay{position:fixed;left:0;top:0;width:100%;height:100%}#qtip-overlay.blurs{cursor:pointer}#qtip-overlay div{position:absolute;left:0;top:0;width:100%;height:100%;background-color:#000;opacity:.7;filter:alpha(opacity=70);-ms-filter:"alpha(Opacity=70)"}.qtipmodal-ie6fix{position:absolute!important}
\ No newline at end of file

Added: trunk/webapp/rb/jquery.qtip.min.js
===================================================================
--- trunk/webapp/rb/jquery.qtip.min.js	                        (rev 0)
+++ trunk/webapp/rb/jquery.qtip.min.js	2017-08-19 17:56:21 UTC (rev 442)
@@ -0,0 +1,4 @@
+/* qTip2 v2.2.0 tips modal viewport svg imagemap ie6 | qtip2.com | Licensed MIT, GPL | Thu Nov 21 2013 20:34:59 */
+(function(t,e,i){(function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],t):jQuery&&!jQuery.fn.qtip&&t(jQuery)})(function(s){"use strict";function o(t,e,i,o){this.id=i,this.target=t,this.tooltip=E,this.elements={target:t},this._id=X+"-"+i,this.timers={img:{}},this.options=e,this.plugins={},this.cache={event:{},target:s(),disabled:k,attr:o,onTooltip:k,lastClass:""},this.rendered=this.destroyed=this.disabled=this.waiting=this.hiddenDuringWait=this.positioning=this.triggering=k}function n(t){return t===E||"object"!==s.type(t)}function r(t){return!(s.isFunction(t)||t&&t.attr||t.length||"object"===s.type(t)&&(t.jquery||t.then))}function a(t){var e,i,o,a;return n(t)?k:(n(t.metadata)&&(t.metadata={type:t.metadata}),"content"in t&&(e=t.content,n(e)||e.jquery||e.done?e=t.content={text:i=r(e)?k:e}:i=e.text,"ajax"in e&&(o=e.ajax,a=o&&o.once!==k,delete e.ajax,e.text=function(t,e){var n=i||s(this).attr(e.options.content.attr)||"Loading...",r=s.ajax(s.extend({},o,{context:e})).then(o.success,E,o.error).then(function(t){return t&&a&&e.set("content.text",t),t},function(t,i,s){e.destroyed||0===t.status||e.set("content.text",i+": "+s)});return a?n:(e.set("content.text",n),r)}),"title"in e&&(n(e.title)||(e.button=e.title.button,e.title=e.title.text),r(e.title||k)&&(e.title=k))),"position"in t&&n(t.position)&&(t.position={my:t.position,at:t.position}),"show"in t&&n(t.show)&&(t.show=t.show.jquery?{target:t.show}:t.show===W?{ready:W}:{event:t.show}),"hide"in t&&n(t.hide)&&(t.hide=t.hide.jquery?{target:t.hide}:{event:t.hide}),"style"in t&&n(t.style)&&(t.style={classes:t.style}),s.each(R,function(){this.sanitize&&this.sanitize(t)}),t)}function h(t,e){for(var i,s=0,o=t,n=e.split(".");o=o[n[s++]];)n.length>s&&(i=o);return[i||t,n.pop()]}function l(t,e){var i,s,o;for(i in this.checks)for(s in this.checks[i])(o=RegExp(s,"i").exec(t))&&(e.push(o),("builtin"===i||this.plugins[i])&&this.checks[i][s].apply(this.plugins[i]||this,e))}function c(t){return G.concat("").join(t?"-"+t+" ":" ")}function d(i){return i&&{type:i.type,pageX:i.pageX,pageY:i.pageY,target:i.target,relatedTarget:i.relatedTarget,scrollX:i.scrollX||t.pageXOffset||e.body.scrollLeft||e.documentElement.scrollLeft,scrollY:i.scrollY||t.pageYOffset||e.body.scrollTop||e.documentElement.scrollTop}||{}}function p(t,e){return e>0?setTimeout(s.proxy(t,this),e):(t.call(this),i)}function u(t){return this.tooltip.hasClass(ee)?k:(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this.timers.show=p.call(this,function(){this.toggle(W,t)},this.options.show.delay),i)}function f(t){if(this.tooltip.hasClass(ee))return k;var e=s(t.relatedTarget),i=e.closest(U)[0]===this.tooltip[0],o=e[0]===this.options.show.target[0];if(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this!==e[0]&&"mouse"===this.options.position.target&&i||this.options.hide.fixed&&/mouse(out|leave|move)/.test(t.type)&&(i||o))try{t.preventDefault(),t.stopImmediatePropagation()}catch(n){}else this.timers.hide=p.call(this,function(){this.toggle(k,t)},this.options.hide.delay,this)}function g(t){return this.tooltip.hasClass(ee)||!this.options.hide.inactive?k:(clearTimeout(this.timers.inactive),this.timers.inactive=p.call(this,function(){this.hide(t)},this.options.hide.inactive),i)}function m(t){this.rendered&&this.tooltip[0].offsetWidth>0&&this.reposition(t)}function v(t,i,o){s(e.body).delegate(t,(i.split?i:i.join(he+" "))+he,function(){var t=T.api[s.attr(this,H)];t&&!t.disabled&&o.apply(t,arguments)})}function y(t,i,n){var r,h,l,c,d,p=s(e.body),u=t[0]===e?p:t,f=t.metadata?t.metadata(n.metadata):E,g="html5"===n.metadata.type&&f?f[n.metadata.name]:E,m=t.data(n.metadata.name||"qtipopts");try{m="string"==typeof m?s.parseJSON(m):m}catch(v){}if(c=s.extend(W,{},T.defaults,n,"object"==typeof m?a(m):E,a(g||f)),h=c.position,c.id=i,"boolean"==typeof c.content.text){if(l=t.attr(c.content.attr),c.content.attr===k||!l)return k;c.content.text=l}if(h.container.length||(h.container=p),h.target===k&&(h.target=u),c.show.target===k&&(c.show.target=u),c.show.solo===W&&(c.show.solo=h.container.closest("body")),c.hide.target===k&&(c.hide.target=u),c.position.viewport===W&&(c.position.viewport=h.container),h.container=h.container.eq(0),h.at=new z(h.at,W),h.my=new z(h.my),t.data(X))if(c.overwrite)t.qtip("destroy",!0);else if(c.overwrite===k)return k;return t.attr(Y,i),c.suppress&&(d=t.attr("title"))&&t.removeAttr("title").attr(se,d).attr("title",""),r=new o(t,c,i,!!l),t.data(X,r),t.one("remove.qtip-"+i+" removeqtip.qtip-"+i,function(){var t;(t=s(this).data(X))&&t.destroy(!0)}),r}function b(t){return t.charAt(0).toUpperCase()+t.slice(1)}function w(t,e){var s,o,n=e.charAt(0).toUpperCase()+e.slice(1),r=(e+" "+be.join(n+" ")+n).split(" "),a=0;if(ye[e])return t.css(ye[e]);for(;s=r[a++];)if((o=t.css(s))!==i)return ye[e]=s,o}function _(t,e){return Math.ceil(parseFloat(w(t,e)))}function x(t,e){this._ns="tip",this.options=e,this.offset=e.offset,this.size=[e.width,e.height],this.init(this.qtip=t)}function q(t,e){this.options=e,this._ns="-modal",this.init(this.qtip=t)}function C(t){this._ns="ie6",this.init(this.qtip=t)}var T,j,z,M,I,W=!0,k=!1,E=null,S="x",L="y",A="width",B="height",D="top",F="left",O="bottom",P="right",N="center",$="flipinvert",V="shift",R={},X="qtip",Y="data-hasqtip",H="data-qtip-id",G=["ui-widget","ui-tooltip"],U="."+X,Q="click dblclick mousedown mouseup mousemove mouseleave mouseenter".split(" "),J=X+"-fixed",K=X+"-default",Z=X+"-focus",te=X+"-hover",ee=X+"-disabled",ie="_replacedByqTip",se="oldtitle",oe={ie:function(){for(var t=3,i=e.createElement("div");(i.innerHTML="<!--[if gt IE "+ ++t+"]><i></i><![endif]-->")&&i.getElementsByTagName("i")[0];);return t>4?t:0/0}(),iOS:parseFloat((""+(/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))||k};j=o.prototype,j._when=function(t){return s.when.apply(s,t)},j.render=function(t){if(this.rendered||this.destroyed)return this;var e,i=this,o=this.options,n=this.cache,r=this.elements,a=o.content.text,h=o.content.title,l=o.content.button,c=o.position,d=("."+this._id+" ",[]);return s.attr(this.target[0],"aria-describedby",this._id),this.tooltip=r.tooltip=e=s("<div/>",{id:this._id,"class":[X,K,o.style.classes,X+"-pos-"+o.position.my.abbrev()].join(" "),width:o.style.width||"",height:o.style.height||"",tracking:"mouse"===c.target&&c.adjust.mouse,role:"alert","aria-live":"polite","aria-atomic":k,"aria-describedby":this._id+"-content","aria-hidden":W}).toggleClass(ee,this.disabled).attr(H,this.id).data(X,this).appendTo(c.container).append(r.content=s("<div />",{"class":X+"-content",id:this._id+"-content","aria-atomic":W})),this.rendered=-1,this.positioning=W,h&&(this._createTitle(),s.isFunction(h)||d.push(this._updateTitle(h,k))),l&&this._createButton(),s.isFunction(a)||d.push(this._updateContent(a,k)),this.rendered=W,this._setWidget(),s.each(R,function(t){var e;"render"===this.initialize&&(e=this(i))&&(i.plugins[t]=e)}),this._unassignEvents(),this._assignEvents(),this._when(d).then(function(){i._trigger("render"),i.positioning=k,i.hiddenDuringWait||!o.show.ready&&!t||i.toggle(W,n.event,k),i.hiddenDuringWait=k}),T.api[this.id]=this,this},j.destroy=function(t){function e(){if(!this.destroyed){this.destroyed=W;var t=this.target,e=t.attr(se);this.rendered&&this.tooltip.stop(1,0).find("*").remove().end().remove(),s.each(this.plugins,function(){this.destroy&&this.destroy()}),clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this._unassignEvents(),t.removeData(X).removeAttr(H).removeAttr(Y).removeAttr("aria-describedby"),this.options.suppress&&e&&t.attr("title",e).removeAttr(se),this._unbind(t),this.options=this.elements=this.cache=this.timers=this.plugins=this.mouse=E,delete T.api[this.id]}}return this.destroyed?this.target:(t===W&&"hide"!==this.triggering||!this.rendered?e.call(this):(this.tooltip.one("tooltiphidden",s.proxy(e,this)),!this.triggering&&this.hide()),this.target)},M=j.checks={builtin:{"^id$":function(t,e,i,o){var n=i===W?T.nextid:i,r=X+"-"+n;n!==k&&n.length>0&&!s("#"+r).length?(this._id=r,this.rendered&&(this.tooltip[0].id=this._id,this.elements.content[0].id=this._id+"-content",this.elements.title[0].id=this._id+"-title")):t[e]=o},"^prerender":function(t,e,i){i&&!this.rendered&&this.render(this.options.show.ready)},"^content.text$":function(t,e,i){this._updateContent(i)},"^content.attr$":function(t,e,i,s){this.options.content.text===this.target.attr(s)&&this._updateContent(this.target.attr(i))},"^content.title$":function(t,e,s){return s?(s&&!this.elements.title&&this._createTitle(),this._updateTitle(s),i):this._removeTitle()},"^content.button$":function(t,e,i){this._updateButton(i)},"^content.title.(text|button)$":function(t,e,i){this.set("content."+e,i)},"^position.(my|at)$":function(t,e,i){"string"==typeof i&&(t[e]=new z(i,"at"===e))},"^position.container$":function(t,e,i){this.rendered&&this.tooltip.appendTo(i)},"^show.ready$":function(t,e,i){i&&(!this.rendered&&this.render(W)||this.toggle(W))},"^style.classes$":function(t,e,i,s){this.rendered&&this.tooltip.removeClass(s).addClass(i)},"^style.(width|height)":function(t,e,i){this.rendered&&this.tooltip.css(e,i)},"^style.widget|content.title":function(){this.rendered&&this._setWidget()},"^style.def":function(t,e,i){this.rendered&&this.tooltip.toggleClass(K,!!i)},"^events.(render|show|move|hide|focus|blur)$":function(t,e,i){this.rendered&&this.tooltip[(s.isFunction(i)?"":"un")+"bind"]("tooltip"+e,i)},"^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)":function(){if(this.rendered){var t=this.options.position;this.tooltip.attr("tracking","mouse"===t.target&&t.adjust.mouse),this._unassignEvents(),this._assignEvents()}}}},j.get=function(t){if(this.destroyed)return this;var e=h(this.options,t.toLowerCase()),i=e[0][e[1]];return i.precedance?i.string():i};var ne=/^position\.(my|at|adjust|target|container|viewport)|style|content|show\.ready/i,re=/^prerender|show\.ready/i;j.set=function(t,e){if(this.destroyed)return this;var o,n=this.rendered,r=k,c=this.options;return this.checks,"string"==typeof t?(o=t,t={},t[o]=e):t=s.extend({},t),s.each(t,function(e,o){if(n&&re.test(e))return delete t[e],i;var a,l=h(c,e.toLowerCase());a=l[0][l[1]],l[0][l[1]]=o&&o.nodeType?s(o):o,r=ne.test(e)||r,t[e]=[l[0],l[1],o,a]}),a(c),this.positioning=W,s.each(t,s.proxy(l,this)),this.positioning=k,this.rendered&&this.tooltip[0].offsetWidth>0&&r&&this.reposition("mouse"===c.position.target?E:this.cache.event),this},j._update=function(t,e){var i=this,o=this.cache;return this.rendered&&t?(s.isFunction(t)&&(t=t.call(this.elements.target,o.event,this)||""),s.isFunction(t.then)?(o.waiting=W,t.then(function(t){return o.waiting=k,i._update(t,e)},E,function(t){return i._update(t,e)})):t===k||!t&&""!==t?k:(t.jquery&&t.length>0?e.empty().append(t.css({display:"block",visibility:"visible"})):e.html(t),this._waitForContent(e).then(function(t){t.images&&t.images.length&&i.rendered&&i.tooltip[0].offsetWidth>0&&i.reposition(o.event,!t.length)}))):k},j._waitForContent=function(t){var e=this.cache;return e.waiting=W,(s.fn.imagesLoaded?t.imagesLoaded():s.Deferred().resolve([])).done(function(){e.waiting=k}).promise()},j._updateContent=function(t,e){this._update(t,this.elements.content,e)},j._updateTitle=function(t,e){this._update(t,this.elements.title,e)===k&&this._removeTitle(k)},j._createTitle=function(){var t=this.elements,e=this._id+"-title";t.titlebar&&this._removeTitle(),t.titlebar=s("<div />",{"class":X+"-titlebar "+(this.options.style.widget?c("header"):"")}).append(t.title=s("<div />",{id:e,"class":X+"-title","aria-atomic":W})).insertBefore(t.content).delegate(".qtip-close","mousedown keydown mouseup keyup mouseout",function(t){s(this).toggleClass("ui-state-active ui-state-focus","down"===t.type.substr(-4))}).delegate(".qtip-close","mouseover mouseout",function(t){s(this).toggleClass("ui-state-hover","mouseover"===t.type)}),this.options.content.button&&this._createButton()},j._removeTitle=function(t){var e=this.elements;e.title&&(e.titlebar.remove(),e.titlebar=e.title=e.button=E,t!==k&&this.reposition())},j.reposition=function(i,o){if(!this.rendered||this.positioning||this.destroyed)return this;this.positioning=W;var n,r,a=this.cache,h=this.tooltip,l=this.options.position,c=l.target,d=l.my,p=l.at,u=l.viewport,f=l.container,g=l.adjust,m=g.method.split(" "),v=h.outerWidth(k),y=h.outerHeight(k),b=0,w=0,_=h.css("position"),x={left:0,top:0},q=h[0].offsetWidth>0,C=i&&"scroll"===i.type,T=s(t),j=f[0].ownerDocument,z=this.mouse;if(s.isArray(c)&&2===c.length)p={x:F,y:D},x={left:c[0],top:c[1]};else if("mouse"===c)p={x:F,y:D},!z||!z.pageX||!g.mouse&&i&&i.pageX?i&&i.pageX||((!g.mouse||this.options.show.distance)&&a.origin&&a.origin.pageX?i=a.origin:(!i||i&&("resize"===i.type||"scroll"===i.type))&&(i=a.event)):i=z,"static"!==_&&(x=f.offset()),j.body.offsetWidth!==(t.innerWidth||j.documentElement.clientWidth)&&(r=s(e.body).offset()),x={left:i.pageX-x.left+(r&&r.left||0),top:i.pageY-x.top+(r&&r.top||0)},g.mouse&&C&&z&&(x.left-=(z.scrollX||0)-T.scrollLeft(),x.top-=(z.scrollY||0)-T.scrollTop());else{if("event"===c?i&&i.target&&"scroll"!==i.type&&"resize"!==i.type?a.target=s(i.target):i.target||(a.target=this.elements.target):"event"!==c&&(a.target=s(c.jquery?c:this.elements.target)),c=a.target,c=s(c).eq(0),0===c.length)return this;c[0]===e||c[0]===t?(b=oe.iOS?t.innerWidth:c.width(),w=oe.iOS?t.innerHeight:c.height(),c[0]===t&&(x={top:(u||c).scrollTop(),left:(u||c).scrollLeft()})):R.imagemap&&c.is("area")?n=R.imagemap(this,c,p,R.viewport?m:k):R.svg&&c&&c[0].ownerSVGElement?n=R.svg(this,c,p,R.viewport?m:k):(b=c.outerWidth(k),w=c.outerHeight(k),x=c.offset()),n&&(b=n.width,w=n.height,r=n.offset,x=n.position),x=this.reposition.offset(c,x,f),(oe.iOS>3.1&&4.1>oe.iOS||oe.iOS>=4.3&&4.33>oe.iOS||!oe.iOS&&"fixed"===_)&&(x.left-=T.scrollLeft(),x.top-=T.scrollTop()),(!n||n&&n.adjustable!==k)&&(x.left+=p.x===P?b:p.x===N?b/2:0,x.top+=p.y===O?w:p.y===N?w/2:0)}return x.left+=g.x+(d.x===P?-v:d.x===N?-v/2:0),x.top+=g.y+(d.y===O?-y:d.y===N?-y/2:0),R.viewport?(x.adjusted=R.viewport(this,x,l,b,w,v,y),r&&x.adjusted.left&&(x.left+=r.left),r&&x.adjusted.top&&(x.top+=r.top)):x.adjusted={left:0,top:0},this._trigger("move",[x,u.elem||u],i)?(delete x.adjusted,o===k||!q||isNaN(x.left)||isNaN(x.top)||"mouse"===c||!s.isFunction(l.effect)?h.css(x):s.isFunction(l.effect)&&(l.effect.call(h,this,s.extend({},x)),h.queue(function(t){s(this).css({opacity:"",height:""}),oe.ie&&this.style.removeAttribute("filter"),t()})),this.positioning=k,this):this},j.reposition.offset=function(t,i,o){function n(t,e){i.left+=e*t.scrollLeft(),i.top+=e*t.scrollTop()}if(!o[0])return i;var r,a,h,l,c=s(t[0].ownerDocument),d=!!oe.ie&&"CSS1Compat"!==e.compatMode,p=o[0];do"static"!==(a=s.css(p,"position"))&&("fixed"===a?(h=p.getBoundingClientRect(),n(c,-1)):(h=s(p).position(),h.left+=parseFloat(s.css(p,"borderLeftWidth"))||0,h.top+=parseFloat(s.css(p,"borderTopWidth"))||0),i.left-=h.left+(parseFloat(s.css(p,"marginLeft"))||0),i.top-=h.top+(parseFloat(s.css(p,"marginTop"))||0),r||"hidden"===(l=s.css(p,"overflow"))||"visible"===l||(r=s(p)));while(p=p.offsetParent);return r&&(r[0]!==c[0]||d)&&n(r,1),i};var ae=(z=j.reposition.Corner=function(t,e){t=(""+t).replace(/([A-Z])/," $1").replace(/middle/gi,N).toLowerCase(),this.x=(t.match(/left|right/i)||t.match(/center/)||["inherit"])[0].toLowerCase(),this.y=(t.match(/top|bottom|center/i)||["inherit"])[0].toLowerCase(),this.forceY=!!e;var i=t.charAt(0);this.precedance="t"===i||"b"===i?L:S}).prototype;ae.invert=function(t,e){this[t]=this[t]===F?P:this[t]===P?F:e||this[t]},ae.string=function(){var t=this.x,e=this.y;return t===e?t:this.precedance===L||this.forceY&&"center"!==e?e+" "+t:t+" "+e},ae.abbrev=function(){var t=this.string().split(" ");return t[0].charAt(0)+(t[1]&&t[1].charAt(0)||"")},ae.clone=function(){return new z(this.string(),this.forceY)},j.toggle=function(t,i){var o=this.cache,n=this.options,r=this.tooltip;if(i){if(/over|enter/.test(i.type)&&/out|leave/.test(o.event.type)&&n.show.target.add(i.target).length===n.show.target.length&&r.has(i.relatedTarget).length)return this;o.event=d(i)}if(this.waiting&&!t&&(this.hiddenDuringWait=W),!this.rendered)return t?this.render(1):this;if(this.destroyed||this.disabled)return this;var a,h,l,c=t?"show":"hide",p=this.options[c],u=(this.options[t?"hide":"show"],this.options.position),f=this.options.content,g=this.tooltip.css("width"),m=this.tooltip.is(":visible"),v=t||1===p.target.length,y=!i||2>p.target.length||o.target[0]===i.target;return(typeof t).search("boolean|number")&&(t=!m),a=!r.is(":animated")&&m===t&&y,h=a?E:!!this._trigger(c,[90]),this.destroyed?this:(h!==k&&t&&this.focus(i),!h||a?this:(s.attr(r[0],"aria-hidden",!t),t?(o.origin=d(this.mouse),s.isFunction(f.text)&&this._updateContent(f.text,k),s.isFunction(f.title)&&this._updateTitle(f.title,k),!I&&"mouse"===u.target&&u.adjust.mouse&&(s(e).bind("mousemove."+X,this._storeMouse),I=W),g||r.css("width",r.outerWidth(k)),this.reposition(i,arguments[2]),g||r.css("width",""),p.solo&&("string"==typeof p.solo?s(p.solo):s(U,p.solo)).not(r).not(p.target).qtip("hide",s.Event("tooltipsolo"))):(clearTimeout(this.timers.show),delete o.origin,I&&!s(U+'[tracking="true"]:visible',p.solo).not(r).length&&(s(e).unbind("mousemove."+X),I=k),this.blur(i)),l=s.proxy(function(){t?(oe.ie&&r[0].style.removeAttribute("filter"),r.css("overflow",""),"string"==typeof p.autofocus&&s(this.options.show.autofocus,r).focus(),this.options.show.target.trigger("qtip-"+this.id+"-inactive")):r.css({display:"",visibility:"",opacity:"",left:"",top:""}),this._trigger(t?"visible":"hidden")},this),p.effect===k||v===k?(r[c](),l()):s.isFunction(p.effect)?(r.stop(1,1),p.effect.call(r,this),r.queue("fx",function(t){l(),t()})):r.fadeTo(90,t?1:0,l),t&&p.target.trigger("qtip-"+this.id+"-inactive"),this))},j.show=function(t){return this.toggle(W,t)},j.hide=function(t){return this.toggle(k,t)},j.focus=function(t){if(!this.rendered||this.destroyed)return this;var e=s(U),i=this.tooltip,o=parseInt(i[0].style.zIndex,10),n=T.zindex+e.length;return i.hasClass(Z)||this._trigger("focus",[n],t)&&(o!==n&&(e.each(function(){this.style.zIndex>o&&(this.style.zIndex=this.style.zIndex-1)}),e.filter("."+Z).qtip("blur",t)),i.addClass(Z)[0].style.zIndex=n),this},j.blur=function(t){return!this.rendered||this.destroyed?this:(this.tooltip.removeClass(Z),this._trigger("blur",[this.tooltip.css("zIndex")],t),this)},j.disable=function(t){return this.destroyed?this:("toggle"===t?t=!(this.rendered?this.tooltip.hasClass(ee):this.disabled):"boolean"!=typeof t&&(t=W),this.rendered&&this.tooltip.toggleClass(ee,t).attr("aria-disabled",t),this.disabled=!!t,this)},j.enable=function(){return this.disable(k)},j._createButton=function(){var t=this,e=this.elements,i=e.tooltip,o=this.options.content.button,n="string"==typeof o,r=n?o:"Close tooltip";e.button&&e.button.remove(),e.button=o.jquery?o:s("<a />",{"class":"qtip-close "+(this.options.style.widget?"":X+"-icon"),title:r,"aria-label":r}).prepend(s("<span />",{"class":"ui-icon ui-icon-close",html:"&times;"})),e.button.appendTo(e.titlebar||i).attr("role","button").click(function(e){return i.hasClass(ee)||t.hide(e),k})},j._updateButton=function(t){if(!this.rendered)return k;var e=this.elements.button;t?this._createButton():e.remove()},j._setWidget=function(){var t=this.options.style.widget,e=this.elements,i=e.tooltip,s=i.hasClass(ee);i.removeClass(ee),ee=t?"ui-state-disabled":"qtip-disabled",i.toggleClass(ee,s),i.toggleClass("ui-helper-reset "+c(),t).toggleClass(K,this.options.style.def&&!t),e.content&&e.content.toggleClass(c("content"),t),e.titlebar&&e.titlebar.toggleClass(c("header"),t),e.button&&e.button.toggleClass(X+"-icon",!t)},j._storeMouse=function(t){(this.mouse=d(t)).type="mousemove"},j._bind=function(t,e,i,o,n){var r="."+this._id+(o?"-"+o:"");e.length&&s(t).bind((e.split?e:e.join(r+" "))+r,s.proxy(i,n||this))},j._unbind=function(t,e){s(t).unbind("."+this._id+(e?"-"+e:""))};var he="."+X;s(function(){v(U,["mouseenter","mouseleave"],function(t){var e="mouseenter"===t.type,i=s(t.currentTarget),o=s(t.relatedTarget||t.target),n=this.options;e?(this.focus(t),i.hasClass(J)&&!i.hasClass(ee)&&clearTimeout(this.timers.hide)):"mouse"===n.position.target&&n.hide.event&&n.show.target&&!o.closest(n.show.target[0]).length&&this.hide(t),i.toggleClass(te,e)}),v("["+H+"]",Q,g)}),j._trigger=function(t,e,i){var o=s.Event("tooltip"+t);return o.originalEvent=i&&s.extend({},i)||this.cache.event||E,this.triggering=t,this.tooltip.trigger(o,[this].concat(e||[])),this.triggering=k,!o.isDefaultPrevented()},j._bindEvents=function(t,e,o,n,r,a){if(n.add(o).length===n.length){var h=[];e=s.map(e,function(e){var o=s.inArray(e,t);return o>-1?(h.push(t.splice(o,1)[0]),i):e}),h.length&&this._bind(o,h,function(t){var e=this.rendered?this.tooltip[0].offsetWidth>0:!1;(e?a:r).call(this,t)})}this._bind(o,t,r),this._bind(n,e,a)},j._assignInitialEvents=function(t){function e(t){return this.disabled||this.destroyed?k:(this.cache.event=d(t),this.cache.target=t?s(t.target):[i],clearTimeout(this.timers.show),this.timers.show=p.call(this,function(){this.render("object"==typeof t||o.show.ready)},o.show.delay),i)}var o=this.options,n=o.show.target,r=o.hide.target,a=o.show.event?s.trim(""+o.show.event).split(" "):[],h=o.hide.event?s.trim(""+o.hide.event).split(" "):[];/mouse(over|enter)/i.test(o.show.event)&&!/mouse(out|leave)/i.test(o.hide.event)&&h.push("mouseleave"),this._bind(n,"mousemove",function(t){this._storeMouse(t),this.cache.onTarget=W}),this._bindEvents(a,h,n,r,e,function(){clearTimeout(this.timers.show)}),(o.show.ready||o.prerender)&&e.call(this,t)},j._assignEvents=function(){var i=this,o=this.options,n=o.position,r=this.tooltip,a=o.show.target,h=o.hide.target,l=n.container,c=n.viewport,d=s(e),p=(s(e.body),s(t)),v=o.show.event?s.trim(""+o.show.event).split(" "):[],y=o.hide.event?s.trim(""+o.hide.event).split(" "):[];s.each(o.events,function(t,e){i._bind(r,"toggle"===t?["tooltipshow","tooltiphide"]:["tooltip"+t],e,null,r)}),/mouse(out|leave)/i.test(o.hide.event)&&"window"===o.hide.leave&&this._bind(d,["mouseout","blur"],function(t){/select|option/.test(t.target.nodeName)||t.relatedTarget||this.hide(t)}),o.hide.fixed?h=h.add(r.addClass(J)):/mouse(over|enter)/i.test(o.show.event)&&this._bind(h,"mouseleave",function(){clearTimeout(this.timers.show)}),(""+o.hide.event).indexOf("unfocus")>-1&&this._bind(l.closest("html"),["mousedown","touchstart"],function(t){var e=s(t.target),i=this.rendered&&!this.tooltip.hasClass(ee)&&this.tooltip[0].offsetWidth>0,o=e.parents(U).filter(this.tooltip[0]).length>0;e[0]===this.target[0]||e[0]===this.tooltip[0]||o||this.target.has(e[0]).length||!i||this.hide(t)}),"number"==typeof o.hide.inactive&&(this._bind(a,"qtip-"+this.id+"-inactive",g),this._bind(h.add(r),T.inactiveEvents,g,"-inactive")),this._bindEvents(v,y,a,h,u,f),this._bind(a.add(r),"mousemove",function(t){if("number"==typeof o.hide.distance){var e=this.cache.origin||{},i=this.options.hide.distance,s=Math.abs;(s(t.pageX-e.pageX)>=i||s(t.pageY-e.pageY)>=i)&&this.hide(t)}this._storeMouse(t)}),"mouse"===n.target&&n.adjust.mouse&&(o.hide.event&&this._bind(a,["mouseenter","mouseleave"],function(t){this.cache.onTarget="mouseenter"===t.type}),this._bind(d,"mousemove",function(t){this.rendered&&this.cache.onTarget&&!this.tooltip.hasClass(ee)&&this.tooltip[0].offsetWidth>0&&this.reposition(t)})),(n.adjust.resize||c.length)&&this._bind(s.event.special.resize?c:p,"resize",m),n.adjust.scroll&&this._bind(p.add(n.container),"scroll",m)},j._unassignEvents=function(){var i=[this.options.show.target[0],this.options.hide.target[0],this.rendered&&this.tooltip[0],this.options.position.container[0],this.options.position.viewport[0],this.options.position.container.closest("html")[0],t,e];this._unbind(s([]).pushStack(s.grep(i,function(t){return"object"==typeof t})))},T=s.fn.qtip=function(t,e,o){var n=(""+t).toLowerCase(),r=E,h=s.makeArray(arguments).slice(1),l=h[h.length-1],c=this[0]?s.data(this[0],X):E;return!arguments.length&&c||"api"===n?c:"string"==typeof t?(this.each(function(){var t=s.data(this,X);if(!t)return W;if(l&&l.timeStamp&&(t.cache.event=l),!e||"option"!==n&&"options"!==n)t[n]&&t[n].apply(t,h);else{if(o===i&&!s.isPlainObject(e))return r=t.get(e),k;t.set(e,o)}}),r!==E?r:this):"object"!=typeof t&&arguments.length?i:(c=a(s.extend(W,{},t)),this.each(function(t){var e,o;return o=s.isArray(c.id)?c.id[t]:c.id,o=!o||o===k||1>o.length||T.api[o]?T.nextid++:o,e=y(s(this),o,c),e===k?W:(T.api[o]=e,s.each(R,function(){"initialize"===this.initialize&&this(e)}),e._assignInitialEvents(l),i)}))},s.qtip=o,T.api={},s.each({attr:function(t,e){if(this.length){var i=this[0],o="title",n=s.data(i,"qtip");if(t===o&&n&&"object"==typeof n&&n.options.suppress)return 2>arguments.length?s.attr(i,se):(n&&n.options.content.attr===o&&n.cache.attr&&n.set("content.text",e),this.attr(se,e))}return s.fn["attr"+ie].apply(this,arguments)},clone:function(t){var e=(s([]),s.fn["clone"+ie].apply(this,arguments));return t||e.filter("["+se+"]").attr("title",function(){return s.attr(this,se)}).removeAttr(se),e}},function(t,e){if(!e||s.fn[t+ie])return W;var i=s.fn[t+ie]=s.fn[t];s.fn[t]=function(){return e.apply(this,arguments)||i.apply(this,arguments)}}),s.ui||(s["cleanData"+ie]=s.cleanData,s.cleanData=function(t){for(var e,i=0;(e=s(t[i])).length;i++)if(e.attr(Y))try{e.triggerHandler("removeqtip")}catch(o){}s["cleanData"+ie].apply(this,arguments)}),T.version="2.2.0",T.nextid=0,T.inactiveEvents=Q,T.zindex=15e3,T.defaults={prerender:k,id:k,overwrite:W,suppress:W,content:{text:W,attr:"title",title:k,button:k},position:{my:"top left",at:"bottom right",target:k,container:k,viewport:k,adjust:{x:0,y:0,mouse:W,scroll:W,resize:W,method:"flipinvert flipinvert"},effect:function(t,e){s(this).animate(e,{duration:200,queue:k})}},show:{target:k,event:"mouseenter",effect:W,delay:90,solo:k,ready:k,autofocus:k},hide:{target:k,event:"mouseleave",effect:W,delay:0,fixed:k,inactive:k,leave:"window",distance:k},style:{classes:"",widget:k,width:k,height:k,def:W},events:{render:E,move:E,show:E,hide:E,toggle:E,visible:E,hidden:E,focus:E,blur:E}};var le,ce="margin",de="border",pe="color",ue="background-color",fe="transparent",ge=" !important",me=!!e.createElement("canvas").getContext,ve=/rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i,ye={},be=["Webkit","O","Moz","ms"];if(me)var we=t.devicePixelRatio||1,_e=function(){var t=e.createElement("canvas").getContext("2d");return t.backingStorePixelRatio||t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||1}(),xe=we/_e;else var qe=function(t,e,i){return"<qtipvml:"+t+' xmlns="urn:schemas-microsoft.com:vml" class="qtip-vml" '+(e||"")+' style="behavior: url(#default#VML); '+(i||"")+'" />'};s.extend(x.prototype,{init:function(t){var e,i;i=this.element=t.elements.tip=s("<div />",{"class":X+"-tip"}).prependTo(t.tooltip),me?(e=s("<canvas />").appendTo(this.element)[0].getContext("2d"),e.lineJoin="miter",e.miterLimit=1e5,e.save()):(e=qe("shape",'coordorigin="0,0"',"position:absolute;"),this.element.html(e+e),t._bind(s("*",i).add(i),["click","mousedown"],function(t){t.stopPropagation()},this._ns)),t._bind(t.tooltip,"tooltipmove",this.reposition,this._ns,this),this.create()},_swapDimensions:function(){this.size[0]=this.options.height,this.size[1]=this.options.width},_resetDimensions:function(){this.size[0]=this.options.width,this.size[1]=this.options.height},_useTitle:function(t){var e=this.qtip.elements.titlebar;return e&&(t.y===D||t.y===N&&this.element.position().top+this.size[1]/2+this.options.offset<e.outerHeight(W))},_parseCorner:function(t){var e=this.qtip.options.position.my;return t===k||e===k?t=k:t===W?t=new z(e.string()):t.string||(t=new z(t),t.fixed=W),t},_parseWidth:function(t,e,i){var s=this.qtip.elements,o=de+b(e)+"Width";return(i?_(i,o):_(s.content,o)||_(this._useTitle(t)&&s.titlebar||s.content,o)||_(s.tooltip,o))||0},_parseRadius:function(t){var e=this.qtip.elements,i=de+b(t.y)+b(t.x)+"Radius";return 9>oe.ie?0:_(this._useTitle(t)&&e.titlebar||e.content,i)||_(e.tooltip,i)||0},_invalidColour:function(t,e,i){var s=t.css(e);return!s||i&&s===t.css(i)||ve.test(s)?k:s},_parseColours:function(t){var e=this.qtip.elements,i=this.element.css("cssText",""),o=de+b(t[t.precedance])+b(pe),n=this._useTitle(t)&&e.titlebar||e.content,r=this._invalidColour,a=[];return a[0]=r(i,ue)||r(n,ue)||r(e.content,ue)||r(e.tooltip,ue)||i.css(ue),a[1]=r(i,o,pe)||r(n,o,pe)||r(e.content,o,pe)||r(e.tooltip,o,pe)||e.tooltip.css(o),s("*",i).add(i).css("cssText",ue+":"+fe+ge+";"+de+":0"+ge+";"),a},_calculateSize:function(t){var e,i,s,o=t.precedance===L,n=this.options.width,r=this.options.height,a="c"===t.abbrev(),h=(o?n:r)*(a?.5:1),l=Math.pow,c=Math.round,d=Math.sqrt(l(h,2)+l(r,2)),p=[this.border/h*d,this.border/r*d];return p[2]=Math.sqrt(l(p[0],2)-l(this.border,2)),p[3]=Math.sqrt(l(p[1],2)-l(this.border,2)),e=d+p[2]+p[3]+(a?0:p[0]),i=e/d,s=[c(i*n),c(i*r)],o?s:s.reverse()},_calculateTip:function(t,e,i){i=i||1,e=e||this.size;var s=e[0]*i,o=e[1]*i,n=Math.ceil(s/2),r=Math.ceil(o/2),a={br:[0,0,s,o,s,0],bl:[0,0,s,0,0,o],tr:[0,o,s,0,s,o],tl:[0,0,0,o,s,o],tc:[0,o,n,0,s,o],bc:[0,0,s,0,n,o],rc:[0,0,s,r,0,o],lc:[s,0,s,o,0,r]};return a.lt=a.br,a.rt=a.bl,a.lb=a.tr,a.rb=a.tl,a[t.abbrev()]},_drawCoords:function(t,e){t.beginPath(),t.moveTo(e[0],e[1]),t.lineTo(e[2],e[3]),t.lineTo(e[4],e[5]),t.closePath()},create:function(){var t=this.corner=(me||oe.ie)&&this._parseCorner(this.options.corner);return(this.enabled=!!this.corner&&"c"!==this.corner.abbrev())&&(this.qtip.cache.corner=t.clone(),this.update()),this.element.toggle(this.enabled),this.corner},update:function(e,i){if(!this.enabled)return this;var o,n,r,a,h,l,c,d,p=this.qtip.elements,u=this.element,f=u.children(),g=this.options,m=this.size,v=g.mimic,y=Math.round;e||(e=this.qtip.cache.corner||this.corner),v===k?v=e:(v=new z(v),v.precedance=e.precedance,"inherit"===v.x?v.x=e.x:"inherit"===v.y?v.y=e.y:v.x===v.y&&(v[e.precedance]=e[e.precedance])),n=v.precedance,e.precedance===S?this._swapDimensions():this._resetDimensions(),o=this.color=this._parseColours(e),o[1]!==fe?(d=this.border=this._parseWidth(e,e[e.precedance]),g.border&&1>d&&!ve.test(o[1])&&(o[0]=o[1]),this.border=d=g.border!==W?g.border:d):this.border=d=0,c=this.size=this._calculateSize(e),u.css({width:c[0],height:c[1],lineHeight:c[1]+"px"}),l=e.precedance===L?[y(v.x===F?d:v.x===P?c[0]-m[0]-d:(c[0]-m[0])/2),y(v.y===D?c[1]-m[1]:0)]:[y(v.x===F?c[0]-m[0]:0),y(v.y===D?d:v.y===O?c[1]-m[1]-d:(c[1]-m[1])/2)],me?(r=f[0].getContext("2d"),r.restore(),r.save(),r.clearRect(0,0,6e3,6e3),a=this._calculateTip(v,m,xe),h=this._calculateTip(v,this.size,xe),f.attr(A,c[0]*xe).attr(B,c[1]*xe),f.css(A,c[0]).css(B,c[1]),this._drawCoords(r,h),r.fillStyle=o[1],r.fill(),r.translate(l[0]*xe,l[1]*xe),this._drawCoords(r,a),r.fillStyle=o[0],r.fill()):(a=this._calculateTip(v),a="m"+a[0]+","+a[1]+" l"+a[2]+","+a[3]+" "+a[4]+","+a[5]+" xe",l[2]=d&&/^(r|b)/i.test(e.string())?8===oe.ie?2:1:0,f.css({coordsize:c[0]+d+" "+(c[1]+d),antialias:""+(v.string().indexOf(N)>-1),left:l[0]-l[2]*Number(n===S),top:l[1]-l[2]*Number(n===L),width:c[0]+d,height:c[1]+d}).each(function(t){var e=s(this);e[e.prop?"prop":"attr"]({coordsize:c[0]+d+" "+(c[1]+d),path:a,fillcolor:o[0],filled:!!t,stroked:!t}).toggle(!(!d&&!t)),!t&&e.html(qe("stroke",'weight="'+2*d+'px" color="'+o[1]+'" miterlimit="1000" joinstyle="miter"'))})),t.opera&&setTimeout(function(){p.tip.css({display:"inline-block",visibility:"visible"})},1),i!==k&&this.calculate(e,c)},calculate:function(t,e){if(!this.enabled)return k;var i,o,n=this,r=this.qtip.elements,a=this.element,h=this.options.offset,l=(r.tooltip.hasClass("ui-widget"),{});return t=t||this.corner,i=t.precedance,e=e||this._calculateSize(t),o=[t.x,t.y],i===S&&o.reverse(),s.each(o,function(s,o){var a,c,d;o===N?(a=i===L?F:D,l[a]="50%",l[ce+"-"+a]=-Math.round(e[i===L?0:1]/2)+h):(a=n._parseWidth(t,o,r.tooltip),c=n._parseWidth(t,o,r.content),d=n._parseRadius(t),l[o]=Math.max(-n.border,s?c:h+(d>a?d:-a)))
+}),l[t[i]]-=e[i===S?0:1],a.css({margin:"",top:"",bottom:"",left:"",right:""}).css(l),l},reposition:function(t,e,s){function o(t,e,i,s,o){t===V&&l.precedance===e&&c[s]&&l[i]!==N?l.precedance=l.precedance===S?L:S:t!==V&&c[s]&&(l[e]=l[e]===N?c[s]>0?s:o:l[e]===s?o:s)}function n(t,e,o){l[t]===N?g[ce+"-"+e]=f[t]=r[ce+"-"+e]-c[e]:(a=r[o]!==i?[c[e],-r[e]]:[-c[e],r[e]],(f[t]=Math.max(a[0],a[1]))>a[0]&&(s[e]-=c[e],f[e]=k),g[r[o]!==i?o:e]=f[t])}if(this.enabled){var r,a,h=e.cache,l=this.corner.clone(),c=s.adjusted,d=e.options.position.adjust.method.split(" "),p=d[0],u=d[1]||d[0],f={left:k,top:k,x:0,y:0},g={};this.corner.fixed!==W&&(o(p,S,L,F,P),o(u,L,S,D,O),l.string()===h.corner.string()||h.cornerTop===c.top&&h.cornerLeft===c.left||this.update(l,k)),r=this.calculate(l),r.right!==i&&(r.left=-r.right),r.bottom!==i&&(r.top=-r.bottom),r.user=this.offset,(f.left=p===V&&!!c.left)&&n(S,F,P),(f.top=u===V&&!!c.top)&&n(L,D,O),this.element.css(g).toggle(!(f.x&&f.y||l.x===N&&f.y||l.y===N&&f.x)),s.left-=r.left.charAt?r.user:p!==V||f.top||!f.left&&!f.top?r.left+this.border:0,s.top-=r.top.charAt?r.user:u!==V||f.left||!f.left&&!f.top?r.top+this.border:0,h.cornerLeft=c.left,h.cornerTop=c.top,h.corner=l.clone()}},destroy:function(){this.qtip._unbind(this.qtip.tooltip,this._ns),this.qtip.elements.tip&&this.qtip.elements.tip.find("*").remove().end().remove()}}),le=R.tip=function(t){return new x(t,t.options.style.tip)},le.initialize="render",le.sanitize=function(t){if(t.style&&"tip"in t.style){var e=t.style.tip;"object"!=typeof e&&(e=t.style.tip={corner:e}),/string|boolean/i.test(typeof e.corner)||(e.corner=W)}},M.tip={"^position.my|style.tip.(corner|mimic|border)$":function(){this.create(),this.qtip.reposition()},"^style.tip.(height|width)$":function(t){this.size=[t.width,t.height],this.update(),this.qtip.reposition()},"^content.title|style.(classes|widget)$":function(){this.update()}},s.extend(W,T.defaults,{style:{tip:{corner:W,mimic:k,width:6,height:6,border:W,offset:0}}});var Ce,Te,je="qtip-modal",ze="."+je;Te=function(){function t(t){if(s.expr[":"].focusable)return s.expr[":"].focusable;var e,i,o,n=!isNaN(s.attr(t,"tabindex")),r=t.nodeName&&t.nodeName.toLowerCase();return"area"===r?(e=t.parentNode,i=e.name,t.href&&i&&"map"===e.nodeName.toLowerCase()?(o=s("img[usemap=#"+i+"]")[0],!!o&&o.is(":visible")):!1):/input|select|textarea|button|object/.test(r)?!t.disabled:"a"===r?t.href||n:n}function i(t){1>c.length&&t.length?t.not("body").blur():c.first().focus()}function o(t){if(h.is(":visible")){var e,o=s(t.target),a=n.tooltip,l=o.closest(U);e=1>l.length?k:parseInt(l[0].style.zIndex,10)>parseInt(a[0].style.zIndex,10),e||o.closest(U)[0]===a[0]||i(o),r=t.target===c[c.length-1]}}var n,r,a,h,l=this,c={};s.extend(l,{init:function(){return h=l.elem=s("<div />",{id:"qtip-overlay",html:"<div></div>",mousedown:function(){return k}}).hide(),s(e.body).bind("focusin"+ze,o),s(e).bind("keydown"+ze,function(t){n&&n.options.show.modal.escape&&27===t.keyCode&&n.hide(t)}),h.bind("click"+ze,function(t){n&&n.options.show.modal.blur&&n.hide(t)}),l},update:function(e){n=e,c=e.options.show.modal.stealfocus!==k?e.tooltip.find("*").filter(function(){return t(this)}):[]},toggle:function(t,o,r){var c=(s(e.body),t.tooltip),d=t.options.show.modal,p=d.effect,u=o?"show":"hide",f=h.is(":visible"),g=s(ze).filter(":visible:not(:animated)").not(c);return l.update(t),o&&d.stealfocus!==k&&i(s(":focus")),h.toggleClass("blurs",d.blur),o&&h.appendTo(e.body),h.is(":animated")&&f===o&&a!==k||!o&&g.length?l:(h.stop(W,k),s.isFunction(p)?p.call(h,o):p===k?h[u]():h.fadeTo(parseInt(r,10)||90,o?1:0,function(){o||h.hide()}),o||h.queue(function(t){h.css({left:"",top:""}),s(ze).length||h.detach(),t()}),a=o,n.destroyed&&(n=E),l)}}),l.init()},Te=new Te,s.extend(q.prototype,{init:function(t){var e=t.tooltip;return this.options.on?(t.elements.overlay=Te.elem,e.addClass(je).css("z-index",T.modal_zindex+s(ze).length),t._bind(e,["tooltipshow","tooltiphide"],function(t,i,o){var n=t.originalEvent;if(t.target===e[0])if(n&&"tooltiphide"===t.type&&/mouse(leave|enter)/.test(n.type)&&s(n.relatedTarget).closest(Te.elem[0]).length)try{t.preventDefault()}catch(r){}else(!n||n&&"tooltipsolo"!==n.type)&&this.toggle(t,"tooltipshow"===t.type,o)},this._ns,this),t._bind(e,"tooltipfocus",function(t,i){if(!t.isDefaultPrevented()&&t.target===e[0]){var o=s(ze),n=T.modal_zindex+o.length,r=parseInt(e[0].style.zIndex,10);Te.elem[0].style.zIndex=n-1,o.each(function(){this.style.zIndex>r&&(this.style.zIndex-=1)}),o.filter("."+Z).qtip("blur",t.originalEvent),e.addClass(Z)[0].style.zIndex=n,Te.update(i);try{t.preventDefault()}catch(a){}}},this._ns,this),t._bind(e,"tooltiphide",function(t){t.target===e[0]&&s(ze).filter(":visible").not(e).last().qtip("focus",t)},this._ns,this),i):this},toggle:function(t,e,s){return t&&t.isDefaultPrevented()?this:(Te.toggle(this.qtip,!!e,s),i)},destroy:function(){this.qtip.tooltip.removeClass(je),this.qtip._unbind(this.qtip.tooltip,this._ns),Te.toggle(this.qtip,k),delete this.qtip.elements.overlay}}),Ce=R.modal=function(t){return new q(t,t.options.show.modal)},Ce.sanitize=function(t){t.show&&("object"!=typeof t.show.modal?t.show.modal={on:!!t.show.modal}:t.show.modal.on===i&&(t.show.modal.on=W))},T.modal_zindex=T.zindex-200,Ce.initialize="render",M.modal={"^show.modal.(on|blur)$":function(){this.destroy(),this.init(),this.qtip.elems.overlay.toggle(this.qtip.tooltip[0].offsetWidth>0)}},s.extend(W,T.defaults,{show:{modal:{on:k,effect:W,blur:W,stealfocus:W,escape:W}}}),R.viewport=function(i,s,o,n,r,a,h){function l(t,e,i,o,n,r,a,h,l){var c=s[n],p=_[t],b=x[t],w=i===V,q=p===n?l:p===r?-l:-l/2,C=b===n?h:b===r?-h:-h/2,T=v[n]+y[n]-(f?0:u[n]),j=T-c,z=c+l-(a===A?g:m)-T,M=q-(_.precedance===t||p===_[e]?C:0)-(b===N?h/2:0);return w?(M=(p===n?1:-1)*q,s[n]+=j>0?j:z>0?-z:0,s[n]=Math.max(-u[n]+y[n],c-M,Math.min(Math.max(-u[n]+y[n]+(a===A?g:m),c+M),s[n],"center"===p?c-q:1e9))):(o*=i===$?2:0,j>0&&(p!==n||z>0)?(s[n]-=M+o,d.invert(t,n)):z>0&&(p!==r||j>0)&&(s[n]-=(p===N?-M:M)+o,d.invert(t,r)),v>s[n]&&-s[n]>z&&(s[n]=c,d=_.clone())),s[n]-c}var c,d,p,u,f,g,m,v,y,b=o.target,w=i.elements.tooltip,_=o.my,x=o.at,q=o.adjust,C=q.method.split(" "),T=C[0],j=C[1]||C[0],z=o.viewport,M=o.container,I=i.cache,W={left:0,top:0};return z.jquery&&b[0]!==t&&b[0]!==e.body&&"none"!==q.method?(u=M.offset()||W,f="static"===M.css("position"),c="fixed"===w.css("position"),g=z[0]===t?z.width():z.outerWidth(k),m=z[0]===t?z.height():z.outerHeight(k),v={left:c?0:z.scrollLeft(),top:c?0:z.scrollTop()},y=z.offset()||W,("shift"!==T||"shift"!==j)&&(d=_.clone()),W={left:"none"!==T?l(S,L,T,q.x,F,P,A,n,a):0,top:"none"!==j?l(L,S,j,q.y,D,O,B,r,h):0},d&&I.lastClass!==(p=X+"-pos-"+d.abbrev())&&w.removeClass(i.cache.lastClass).addClass(i.cache.lastClass=p),W):W},R.polys={polygon:function(t,e){var i,s,o,n={width:0,height:0,position:{top:1e10,right:0,bottom:0,left:1e10},adjustable:k},r=0,a=[],h=1,l=1,c=0,d=0;for(r=t.length;r--;)i=[parseInt(t[--r],10),parseInt(t[r+1],10)],i[0]>n.position.right&&(n.position.right=i[0]),i[0]<n.position.left&&(n.position.left=i[0]),i[1]>n.position.bottom&&(n.position.bottom=i[1]),i[1]<n.position.top&&(n.position.top=i[1]),a.push(i);if(s=n.width=Math.abs(n.position.right-n.position.left),o=n.height=Math.abs(n.position.bottom-n.position.top),"c"===e.abbrev())n.position={left:n.position.left+n.width/2,top:n.position.top+n.height/2};else{for(;s>0&&o>0&&h>0&&l>0;)for(s=Math.floor(s/2),o=Math.floor(o/2),e.x===F?h=s:e.x===P?h=n.width-s:h+=Math.floor(s/2),e.y===D?l=o:e.y===O?l=n.height-o:l+=Math.floor(o/2),r=a.length;r--&&!(2>a.length);)c=a[r][0]-n.position.left,d=a[r][1]-n.position.top,(e.x===F&&c>=h||e.x===P&&h>=c||e.x===N&&(h>c||c>n.width-h)||e.y===D&&d>=l||e.y===O&&l>=d||e.y===N&&(l>d||d>n.height-l))&&a.splice(r,1);n.position={left:a[0][0],top:a[0][1]}}return n},rect:function(t,e,i,s){return{width:Math.abs(i-t),height:Math.abs(s-e),position:{left:Math.min(t,i),top:Math.min(e,s)}}},_angles:{tc:1.5,tr:7/4,tl:5/4,bc:.5,br:.25,bl:.75,rc:2,lc:1,c:0},ellipse:function(t,e,i,s,o){var n=R.polys._angles[o.abbrev()],r=0===n?0:i*Math.cos(n*Math.PI),a=s*Math.sin(n*Math.PI);return{width:2*i-Math.abs(r),height:2*s-Math.abs(a),position:{left:t+r,top:e+a},adjustable:k}},circle:function(t,e,i,s){return R.polys.ellipse(t,e,i,i,s)}},R.svg=function(t,i,o){for(var n,r,a,h,l,c,d,p,u,f,g,m=s(e),v=i[0],y=s(v.ownerSVGElement),b=1,w=1,_=!0;!v.getBBox;)v=v.parentNode;if(!v.getBBox||!v.parentNode)return k;n=y.attr("width")||y.width()||parseInt(y.css("width"),10),r=y.attr("height")||y.height()||parseInt(y.css("height"),10);var x=(parseInt(i.css("stroke-width"),10)||0)/2;switch(x&&(b+=x/n,w+=x/r),v.nodeName){case"ellipse":case"circle":f=R.polys.ellipse(v.cx.baseVal.value,v.cy.baseVal.value,(v.rx||v.r).baseVal.value+x,(v.ry||v.r).baseVal.value+x,o);break;case"line":case"polygon":case"polyline":for(u=v.points||[{x:v.x1.baseVal.value,y:v.y1.baseVal.value},{x:v.x2.baseVal.value,y:v.y2.baseVal.value}],f=[],p=-1,c=u.numberOfItems||u.length;c>++p;)d=u.getItem?u.getItem(p):u[p],f.push.apply(f,[d.x,d.y]);f=R.polys.polygon(f,o);break;default:f=v.getBoundingClientRect(),f={width:f.width,height:f.height,position:{left:f.left,top:f.top}},_=!1}return g=f.position,y=y[0],_&&(y.createSVGPoint&&(a=v.getScreenCTM(),u=y.createSVGPoint(),u.x=g.left,u.y=g.top,h=u.matrixTransform(a),g.left=h.x,g.top=h.y),y.viewBox&&(l=y.viewBox.baseVal)&&l.width&&l.height&&(b*=n/l.width,w*=r/l.height)),g.left+=m.scrollLeft(),g.top+=m.scrollTop(),f},R.imagemap=function(t,e,i){e.jquery||(e=s(e));var o,n,r,a,h,l=e.attr("shape").toLowerCase().replace("poly","polygon"),c=s('img[usemap="#'+e.parent("map").attr("name")+'"]'),d=s.trim(e.attr("coords")),p=d.replace(/,$/,"").split(",");if(!c.length)return k;if("polygon"===l)a=R.polys.polygon(p,i);else{if(!R.polys[l])return k;for(r=-1,h=p.length,n=[];h>++r;)n.push(parseInt(p[r],10));a=R.polys[l].apply(this,n.concat(i))}return o=c.offset(),o.left+=Math.ceil((c.outerWidth(k)-c.width())/2),o.top+=Math.ceil((c.outerHeight(k)-c.height())/2),a.position.left+=o.left,a.position.top+=o.top,a};var Me,Ie='<iframe class="qtip-bgiframe" frameborder="0" tabindex="-1" src="javascript:\'\';"  style="display:block; position:absolute; z-index:-1; filter:alpha(opacity=0); -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";"></iframe>';s.extend(C.prototype,{_scroll:function(){var e=this.qtip.elements.overlay;e&&(e[0].style.top=s(t).scrollTop()+"px")},init:function(i){var o=i.tooltip;1>s("select, object").length&&(this.bgiframe=i.elements.bgiframe=s(Ie).appendTo(o),i._bind(o,"tooltipmove",this.adjustBGIFrame,this._ns,this)),this.redrawContainer=s("<div/>",{id:X+"-rcontainer"}).appendTo(e.body),i.elements.overlay&&i.elements.overlay.addClass("qtipmodal-ie6fix")&&(i._bind(t,["scroll","resize"],this._scroll,this._ns,this),i._bind(o,["tooltipshow"],this._scroll,this._ns,this)),this.redraw()},adjustBGIFrame:function(){var t,e,i=this.qtip.tooltip,s={height:i.outerHeight(k),width:i.outerWidth(k)},o=this.qtip.plugins.tip,n=this.qtip.elements.tip;e=parseInt(i.css("borderLeftWidth"),10)||0,e={left:-e,top:-e},o&&n&&(t="x"===o.corner.precedance?[A,F]:[B,D],e[t[1]]-=n[t[0]]()),this.bgiframe.css(e).css(s)},redraw:function(){if(1>this.qtip.rendered||this.drawing)return this;var t,e,i,s,o=this.qtip.tooltip,n=this.qtip.options.style,r=this.qtip.options.position.container;return this.qtip.drawing=1,n.height&&o.css(B,n.height),n.width?o.css(A,n.width):(o.css(A,"").appendTo(this.redrawContainer),e=o.width(),1>e%2&&(e+=1),i=o.css("maxWidth")||"",s=o.css("minWidth")||"",t=(i+s).indexOf("%")>-1?r.width()/100:0,i=(i.indexOf("%")>-1?t:1)*parseInt(i,10)||e,s=(s.indexOf("%")>-1?t:1)*parseInt(s,10)||0,e=i+s?Math.min(Math.max(e,s),i):e,o.css(A,Math.round(e)).appendTo(r)),this.drawing=0,this},destroy:function(){this.bgiframe&&this.bgiframe.remove(),this.qtip._unbind([t,this.qtip.tooltip],this._ns)}}),Me=R.ie6=function(t){return 6===oe.ie?new C(t):k},Me.initialize="render",M.ie6={"^content|style$":function(){this.redraw()}}})})(window,document);
+//@ sourceMappingURL=http://cdnjs.cloudflare.com/ajax/libs/qtip2/2.2.0/jquery.qtip.min.map
\ No newline at end of file

Added: trunk/webapp/rb/jquery.ui.labeledslider.css
===================================================================
--- trunk/webapp/rb/jquery.ui.labeledslider.css	                        (rev 0)
+++ trunk/webapp/rb/jquery.ui.labeledslider.css	2017-08-19 17:56:21 UTC (rev 442)
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2012 Ben Olson (https://github.com/bseth99/jquery-ui-extensions)
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+.ui-slider-wrapper { position: relative; }
+.ui-slider-wrapper .ui-slider-horizontal { width: 100%; }
+
+.ui-slider-labels { position: absolute; border: 1px solid transparent; }
+.ui-slider-anns { position: absolute; border: 1px solid transparent; }
+
+.ui-slider-label-ticks { border: 1px solid transparent; position: absolute; white-space: nowrap; }
+.ui-slider-label-ticks span { font-size: 0.9em; min-width: 1.2em; }
+.ui-slider-ann-ticks { border: 1px solid transparent; position: absolute; white-space: nowrap; }
+.ui-slider-ann-ticks span { font-size: 0.9em; min-width: 1.2em; }
+
+.ui-slider-wrapper.horizontal { height: 4.5em; }
+.horizontal .ui-slider-labels { left: 0; right: 0; top: 0.7em }
+.horizontal .ui-slider-anns { left: 0; right: 0; top: 0.7em }
+
+.horizontal .ui-slider-label-ticks { width: 1.2em; height: .8em; text-align: center; border-left: 1px solid #999; }
+.horizontal .ui-slider-label-ticks span { position: relative; display: inline-block; margin-left: -1.2em; top: .8em; }
+
+.horizontal .ui-slider-ann-ticks { width: 1.2em; height: .8em; text-align: center; border-left: 1px solid #999; }
+.horizontal .ui-slider-ann-ticks span { position: relative; display: inline-block; margin-left: -1.2em; top: .8em; }
+
+.ui-slider-wrapper.vertical { width: 4.5em; }
+.vertical .ui-slider-labels { top: 1px; bottom: 0; left: 0.7em; }
+.vertical .ui-slider-anns { top: 1px; bottom: 0; left: -0.7em; }
+
+.vertical .ui-slider-label-ticks { height: 1.2em; width: 0.8em; border-bottom: 1px solid #999; }
+.vertical .ui-slider-label-ticks span { position: relative; display: inline-block; margin-left: 1em; top: .6em; }
+
+.vertical .ui-slider-ann-ticks { height: 1.2em; width: 0.8em; border-bottom: 1px solid #999; }
+.vertical .ui-slider-ann-ticks span { position: relative; display: inline-block; margin-left: -2000px; width: 2000px; text-align: right; top: .6em; }
+

Added: trunk/webapp/rb/jquery.ui.labeledslider.js
===================================================================
--- trunk/webapp/rb/jquery.ui.labeledslider.js	                        (rev 0)
+++ trunk/webapp/rb/jquery.ui.labeledslider.js	2017-08-19 17:56:21 UTC (rev 442)
@@ -0,0 +1,179 @@
+/*!
+ * Copyright (c) 2012 Ben Olson (https://github.com/bseth99/jquery-ui-extensions)
+ * jQuery UI LabeledSlider @VERSION
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Depends:
+ *  jquery.ui.core.js
+ *  jquery.ui.widget.js
+ *  jquery.ui.mouse.js
+ *  jquery.ui.slider.js
+ */
+
+(function( $, undefined ) {
+
+
+    $.widget( "ui.labeledslider", $.ui.slider, {
+
+      version: "@VERSION",
+
+      options: {
+         tickInterval: 0,
+         tweenLabels: true,
+         tickLabels: null,
+         tickArray: [],
+         tickAnnotations: []
+      },
+
+      uiSlider: null,
+      tickInterval: 0,
+      tweenLabels: true,
+
+      _create: function( ) {
+
+         this._detectOrientation();
+
+         this.uiSlider =
+             this.element
+                .wrap( '<div class="ui-slider-wrapper ui-widget"></div>' )
+                .before( '<div class="ui-slider-labels">' )
+                .before( '<div class="ui-slider-anns">' )
+                .parent()
+                .addClass( this.orientation )
+                .css( 'font-size', this.element.css('font-size') );
+
+         this._super();
+
+         this.element.removeClass( 'ui-widget' )
+
+         this._alignWithStep();
+
+         if ( this.orientation == 'horizontal' ) {
+            this.uiSlider
+               .width( this.element.css('width') );
+         } else {
+            this.uiSlider
+               .height( this.element.css('height') );
+         }
+
+         this._drawLabels();
+      },
+
+      _drawLabels: function () {
+
+         var labels = this.options.tickLabels || {},
+             $lbl = this.uiSlider.children( '.ui-slider-labels' ),
+             $ann = this.uiSlider.children( '.ui-slider-anns' ),
+             dir = this.orientation == 'horizontal' ? 'left' : 'bottom',
+             min = this.options.min,
+             max = this.options.max,
+             inr = this.tickInterval,
+             cnt = ( max - min ) / inr,
+             tickArray = this.options.tickArray,
+             tickAnnotations = this.options.tickAnnotations,
+             i = 0;
+
+         $lbl.html('');
+         $ann.html('');
+
+         if (tickAnnotations.length > 0) {
+            // tickAnnotations provided, print labels in the array before other labels
+            for (var i = 0; i < tickAnnotations.length; i++ ) {
+		    var loc = Math.round((tickAnnotations[i][0] - min) / (max-min) * 10000 ) / 100;
+                $('<div>').addClass( 'ui-slider-ann-ticks' ).addClass( 'ui-slider-label-tick-ann-' + tickAnnotations[i][0] )
+                   .css( dir, (100 - loc) + '%' )
+                   .html( '<span>'+ tickAnnotations[i][1] +'</span>' )
+                   .appendTo( $ann );
+            }
+         }
+
+         if( tickArray.length > 0 ) {
+            // tickArray provided, print labels only in the array
+            for(var i=0; i<tickArray.length; i++ ) {
+                var label = labels[tickArray[i]];
+                label = label ? label : tickArray[i];
+
+                $('<div>').addClass( 'ui-slider-label-ticks' ).addClass( 'ui-slider-label-tick-' + tickArray[i] )
+                   .css( dir, (Math.round( (tickArray[i] - min)/ cnt * 10000 ) / 100) + '%' )
+                   .html( '<span>'+ label +'</span>' )
+                   .appendTo( $lbl );
+            }
+         }
+         else {
+             for (var i = 0;i<=cnt;i++) {
+                $('<div>').addClass( 'ui-slider-label-ticks' )
+                   .css( dir, (Math.round( i / cnt * 10000 ) / 100) + '%' )
+                   .html( '<span>'+( labels[i*inr+min] ? labels[i*inr+min] : (this.options.tweenLabels ? i*inr+min : '') )+'</span>' )
+                   .appendTo( $lbl );
+             }
+         }
+      },
+
+      _setOption: function( key, value ) {
+
+          this._super( key, value );
+
+          switch ( key ) {
+
+             case 'tickInterval':
+             case 'tickLabels':
+             case 'tickArray':
+             case 'tickAnnotations':
+             case 'min':
+             case 'max':
+             case 'step':
+
+                this._alignWithStep();
+                this._drawLabels();
+                break;
+
+             case 'orientation':
+
+                this.element
+                   .removeClass( 'horizontal vertical' )
+                   .addClass( this.orientation );
+
+                this._drawLabels();
+                break;
+          }
+       },
+
+       _alignWithStep: function () {
+          if ( this.options.tickInterval < this.options.step )
+            this.tickInterval = this.options.step;
+          else
+            this.tickInterval = this.options.tickInterval;
+       },
+
+       _destroy: function() {
+          this._super();
+          this.uiSlider.replaceWith( this.element );
+       },
+
+       widget: function() {
+          return this.uiSlider;
+       }
+
+   });
+
+}(jQuery));

Added: trunk/webapp/rb/loading.gif
===================================================================
(Binary files differ)


Property changes on: trunk/webapp/rb/loading.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Modified: trunk/webapp/tiles/footer.jsp
===================================================================
--- trunk/webapp/tiles/footer.jsp	2017-08-19 09:45:15 UTC (rev 441)
+++ trunk/webapp/tiles/footer.jsp	2017-08-19 17:56:21 UTC (rev 442)
@@ -1,11 +1,10 @@
-<div id="footer">
 <p>
 <a href="http://www.americanbible.org/" title="American Bible Society"><img src="./images/logo_abs.gif" width="105" height="64" alt="American Bible Society" /></a>
 <a href="http://crosswire.org/" title="CrossWire Bible Society"><img src="./images/logo_cwbs.gif" width="161" height="64" alt="CrossWire Bible Society" /></a>
 <a href="http://sbl-site.org/" title="Society of Biblical Literature"><img src="./images/logo_fbl.gif" width="86" height="64" alt="Society of Biblical Literature" /></a>
 </p>
 
-<p>Copyright &copy; 2003-2011  <a href="http://www.crosswire.org/">CrossWire Bible Society</a></p>
+<p>Copyright &copy; 2003-2017  <a href="http://www.crosswire.org/">CrossWire Bible Society</a></p>
 <!--
 <p><a href="http://validator.w3.org/check/referer" title="valid xhtml">xhtml</a></p>
 -->
@@ -13,4 +12,3 @@
 </div>
 </div>
 </div>
-</div>

Modified: trunk/webapp/tiles/header.jsp
===================================================================
--- trunk/webapp/tiles/header.jsp	2017-08-19 09:45:15 UTC (rev 441)
+++ trunk/webapp/tiles/header.jsp	2017-08-19 17:56:21 UTC (rev 442)
@@ -13,11 +13,11 @@
 	Vector [] tabs = (Vector[])session.getAttribute("tabs");
 	Vector showTabs = (Vector)session.getAttribute("showTabs");
 	for (int i = 0; i < tabs[0].size(); i++) {
+		boolean show = !"false".equals(showTabs.size() > i ? (String)showTabs.get(i) : "true");
 		String u = (String)request.getRequestURI();
 		String n = (String)tabs[0].get(i);
 		String t = (String)tabs[1].get(i);
 		String l = (String)tabs[2].get(i);
-		boolean show = !("false".equals((String)showTabs.get(i)));
 		if ((show) || ("preferences.jsp".equals(l))) {
 %>
       <li><a <%= (u.endsWith(l))?"id=\"current\"":"" %> href="<%= l %>" title="<%= t %>"><t:t><%= n %></t:t></a></li>




More information about the sword-cvs mailing list