state of eg
authorBill Erickson <berickxx@gmail.com>
Thu, 14 May 2015 15:00:43 +0000 (11:00 -0400)
committerBill Erickson <berickxx@gmail.com>
Thu, 14 May 2015 15:00:43 +0000 (11:00 -0400)
Signed-off-by: Bill Erickson <berickxx@gmail.com>
state_o_eg/state.asciidoc [new file with mode: 0644]
state_o_eg/state.html [new file with mode: 0644]

diff --git a/state_o_eg/state.asciidoc b/state_o_eg/state.asciidoc
new file mode 100644 (file)
index 0000000..f4688a4
--- /dev/null
@@ -0,0 +1,28 @@
+= State of Evergreen Development
+:data-uri:
+:backend: slidy
+:max-width: 45em
+
+== 2.8 and More
+ * 2.8
+  ** ~500 commits
+  ** 32 code & doc authors
+  ** 12 committers
+ * 2.6 is now security updates only
+ * See Also
+  ** 9am Sat. Developer Update
+  ** 9:30am Sat. Browser Client Update
+
+== New Code & Docs Commit Authors Since EG 2014
+
+.Authors
+[options=""]
+|=======================
+| Aleksey Lazar | Benjamin Wiens | Blake Henderson
+| Christine Morgan | Dananji Liyanage | Debbie Luchenbill 
+| Erica Rohlfs | Fredric T Parks | Hekman Library Technology Team 
+| Hubert Depesz Lubaczewski | Jennifer Pringle | Josh Stompro 
+| Kate Butler | Lynn Floyd | Michele Morgan 
+| Snigdha Dagar | Suzanne Paterno | Terran McCanna 
+| Timothy Spindler | Victoria Lewis |
+|=======================
diff --git a/state_o_eg/state.html b/state_o_eg/state.html
new file mode 100644 (file)
index 0000000..c50bda2
--- /dev/null
@@ -0,0 +1,3943 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">\r
+<head>\r
+<title>State of Evergreen Development</title>\r
+<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />\r
+<meta name="generator" content="AsciiDoc 8.6.9" />\r
+<style type="text/css">\r
+/* Shared CSS for AsciiDoc xhtml11 and html5 backends */\r
+\r
+/* Default font. */\r
+body {\r
+  font-family: Georgia,serif;\r
+}\r
+\r
+/* Title font. */\r
+h1, h2, h3, h4, h5, h6,\r
+div.title, caption.title,\r
+thead, p.table.header,\r
+#toctitle,\r
+#author, #revnumber, #revdate, #revremark,\r
+#footer {\r
+  font-family: Arial,Helvetica,sans-serif;\r
+}\r
+\r
+body {\r
+  margin: 1em 5% 1em 5%;\r
+}\r
+\r
+a {\r
+  color: blue;\r
+  text-decoration: underline;\r
+}\r
+a:visited {\r
+  color: fuchsia;\r
+}\r
+\r
+em {\r
+  font-style: italic;\r
+  color: navy;\r
+}\r
+\r
+strong {\r
+  font-weight: bold;\r
+  color: #083194;\r
+}\r
+\r
+h1, h2, h3, h4, h5, h6 {\r
+  color: #527bbd;\r
+  margin-top: 1.2em;\r
+  margin-bottom: 0.5em;\r
+  line-height: 1.3;\r
+}\r
+\r
+h1, h2, h3 {\r
+  border-bottom: 2px solid silver;\r
+}\r
+h2 {\r
+  padding-top: 0.5em;\r
+}\r
+h3 {\r
+  float: left;\r
+}\r
+h3 + * {\r
+  clear: left;\r
+}\r
+h5 {\r
+  font-size: 1.0em;\r
+}\r
+\r
+div.sectionbody {\r
+  margin-left: 0;\r
+}\r
+\r
+hr {\r
+  border: 1px solid silver;\r
+}\r
+\r
+p {\r
+  margin-top: 0.5em;\r
+  margin-bottom: 0.5em;\r
+}\r
+\r
+ul, ol, li > p {\r
+  margin-top: 0;\r
+}\r
+ul > li     { color: #aaa; }\r
+ul > li > * { color: black; }\r
+\r
+.monospaced, code, pre {\r
+  font-family: "Courier New", Courier, monospace;\r
+  font-size: inherit;\r
+  color: navy;\r
+  padding: 0;\r
+  margin: 0;\r
+}\r
+pre {\r
+  white-space: pre-wrap;\r
+}\r
+\r
+#author {\r
+  color: #527bbd;\r
+  font-weight: bold;\r
+  font-size: 1.1em;\r
+}\r
+#email {\r
+}\r
+#revnumber, #revdate, #revremark {\r
+}\r
+\r
+#footer {\r
+  font-size: small;\r
+  border-top: 2px solid silver;\r
+  padding-top: 0.5em;\r
+  margin-top: 4.0em;\r
+}\r
+#footer-text {\r
+  float: left;\r
+  padding-bottom: 0.5em;\r
+}\r
+#footer-badges {\r
+  float: right;\r
+  padding-bottom: 0.5em;\r
+}\r
+\r
+#preamble {\r
+  margin-top: 1.5em;\r
+  margin-bottom: 1.5em;\r
+}\r
+div.imageblock, div.exampleblock, div.verseblock,\r
+div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,\r
+div.admonitionblock {\r
+  margin-top: 1.0em;\r
+  margin-bottom: 1.5em;\r
+}\r
+div.admonitionblock {\r
+  margin-top: 2.0em;\r
+  margin-bottom: 2.0em;\r
+  margin-right: 10%;\r
+  color: #606060;\r
+}\r
+\r
+div.content { /* Block element content. */\r
+  padding: 0;\r
+}\r
+\r
+/* Block element titles. */\r
+div.title, caption.title {\r
+  color: #527bbd;\r
+  font-weight: bold;\r
+  text-align: left;\r
+  margin-top: 1.0em;\r
+  margin-bottom: 0.5em;\r
+}\r
+div.title + * {\r
+  margin-top: 0;\r
+}\r
+\r
+td div.title:first-child {\r
+  margin-top: 0.0em;\r
+}\r
+div.content div.title:first-child {\r
+  margin-top: 0.0em;\r
+}\r
+div.content + div.title {\r
+  margin-top: 0.0em;\r
+}\r
+\r
+div.sidebarblock > div.content {\r
+  background: #ffffee;\r
+  border: 1px solid #dddddd;\r
+  border-left: 4px solid #f0f0f0;\r
+  padding: 0.5em;\r
+}\r
+\r
+div.listingblock > div.content {\r
+  border: 1px solid #dddddd;\r
+  border-left: 5px solid #f0f0f0;\r
+  background: #f8f8f8;\r
+  padding: 0.5em;\r
+}\r
+\r
+div.quoteblock, div.verseblock {\r
+  padding-left: 1.0em;\r
+  margin-left: 1.0em;\r
+  margin-right: 10%;\r
+  border-left: 5px solid #f0f0f0;\r
+  color: #888;\r
+}\r
+\r
+div.quoteblock > div.attribution {\r
+  padding-top: 0.5em;\r
+  text-align: right;\r
+}\r
+\r
+div.verseblock > pre.content {\r
+  font-family: inherit;\r
+  font-size: inherit;\r
+}\r
+div.verseblock > div.attribution {\r
+  padding-top: 0.75em;\r
+  text-align: left;\r
+}\r
+/* DEPRECATED: Pre version 8.2.7 verse style literal block. */\r
+div.verseblock + div.attribution {\r
+  text-align: left;\r
+}\r
+\r
+div.admonitionblock .icon {\r
+  vertical-align: top;\r
+  font-size: 1.1em;\r
+  font-weight: bold;\r
+  text-decoration: underline;\r
+  color: #527bbd;\r
+  padding-right: 0.5em;\r
+}\r
+div.admonitionblock td.content {\r
+  padding-left: 0.5em;\r
+  border-left: 3px solid #dddddd;\r
+}\r
+\r
+div.exampleblock > div.content {\r
+  border-left: 3px solid #dddddd;\r
+  padding-left: 0.5em;\r
+}\r
+\r
+div.imageblock div.content { padding-left: 0; }\r
+span.image img { border-style: none; vertical-align: text-bottom; }\r
+a.image:visited { color: white; }\r
+\r
+dl {\r
+  margin-top: 0.8em;\r
+  margin-bottom: 0.8em;\r
+}\r
+dt {\r
+  margin-top: 0.5em;\r
+  margin-bottom: 0;\r
+  font-style: normal;\r
+  color: navy;\r
+}\r
+dd > *:first-child {\r
+  margin-top: 0.1em;\r
+}\r
+\r
+ul, ol {\r
+    list-style-position: outside;\r
+}\r
+ol.arabic {\r
+  list-style-type: decimal;\r
+}\r
+ol.loweralpha {\r
+  list-style-type: lower-alpha;\r
+}\r
+ol.upperalpha {\r
+  list-style-type: upper-alpha;\r
+}\r
+ol.lowerroman {\r
+  list-style-type: lower-roman;\r
+}\r
+ol.upperroman {\r
+  list-style-type: upper-roman;\r
+}\r
+\r
+div.compact ul, div.compact ol,\r
+div.compact p, div.compact p,\r
+div.compact div, div.compact div {\r
+  margin-top: 0.1em;\r
+  margin-bottom: 0.1em;\r
+}\r
+\r
+tfoot {\r
+  font-weight: bold;\r
+}\r
+td > div.verse {\r
+  white-space: pre;\r
+}\r
+\r
+div.hdlist {\r
+  margin-top: 0.8em;\r
+  margin-bottom: 0.8em;\r
+}\r
+div.hdlist tr {\r
+  padding-bottom: 15px;\r
+}\r
+dt.hdlist1.strong, td.hdlist1.strong {\r
+  font-weight: bold;\r
+}\r
+td.hdlist1 {\r
+  vertical-align: top;\r
+  font-style: normal;\r
+  padding-right: 0.8em;\r
+  color: navy;\r
+}\r
+td.hdlist2 {\r
+  vertical-align: top;\r
+}\r
+div.hdlist.compact tr {\r
+  margin: 0;\r
+  padding-bottom: 0;\r
+}\r
+\r
+.comment {\r
+  background: yellow;\r
+}\r
+\r
+.footnote, .footnoteref {\r
+  font-size: 0.8em;\r
+}\r
+\r
+span.footnote, span.footnoteref {\r
+  vertical-align: super;\r
+}\r
+\r
+#footnotes {\r
+  margin: 20px 0 20px 0;\r
+  padding: 7px 0 0 0;\r
+}\r
+\r
+#footnotes div.footnote {\r
+  margin: 0 0 5px 0;\r
+}\r
+\r
+#footnotes hr {\r
+  border: none;\r
+  border-top: 1px solid silver;\r
+  height: 1px;\r
+  text-align: left;\r
+  margin-left: 0;\r
+  width: 20%;\r
+  min-width: 100px;\r
+}\r
+\r
+div.colist td {\r
+  padding-right: 0.5em;\r
+  padding-bottom: 0.3em;\r
+  vertical-align: top;\r
+}\r
+div.colist td img {\r
+  margin-top: 0.3em;\r
+}\r
+\r
+@media print {\r
+  #footer-badges { display: none; }\r
+}\r
+\r
+#toc {\r
+  margin-bottom: 2.5em;\r
+}\r
+\r
+#toctitle {\r
+  color: #527bbd;\r
+  font-size: 1.1em;\r
+  font-weight: bold;\r
+  margin-top: 1.0em;\r
+  margin-bottom: 0.1em;\r
+}\r
+\r
+div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {\r
+  margin-top: 0;\r
+  margin-bottom: 0;\r
+}\r
+div.toclevel2 {\r
+  margin-left: 2em;\r
+  font-size: 0.9em;\r
+}\r
+div.toclevel3 {\r
+  margin-left: 4em;\r
+  font-size: 0.9em;\r
+}\r
+div.toclevel4 {\r
+  margin-left: 6em;\r
+  font-size: 0.9em;\r
+}\r
+\r
+span.aqua { color: aqua; }\r
+span.black { color: black; }\r
+span.blue { color: blue; }\r
+span.fuchsia { color: fuchsia; }\r
+span.gray { color: gray; }\r
+span.green { color: green; }\r
+span.lime { color: lime; }\r
+span.maroon { color: maroon; }\r
+span.navy { color: navy; }\r
+span.olive { color: olive; }\r
+span.purple { color: purple; }\r
+span.red { color: red; }\r
+span.silver { color: silver; }\r
+span.teal { color: teal; }\r
+span.white { color: white; }\r
+span.yellow { color: yellow; }\r
+\r
+span.aqua-background { background: aqua; }\r
+span.black-background { background: black; }\r
+span.blue-background { background: blue; }\r
+span.fuchsia-background { background: fuchsia; }\r
+span.gray-background { background: gray; }\r
+span.green-background { background: green; }\r
+span.lime-background { background: lime; }\r
+span.maroon-background { background: maroon; }\r
+span.navy-background { background: navy; }\r
+span.olive-background { background: olive; }\r
+span.purple-background { background: purple; }\r
+span.red-background { background: red; }\r
+span.silver-background { background: silver; }\r
+span.teal-background { background: teal; }\r
+span.white-background { background: white; }\r
+span.yellow-background { background: yellow; }\r
+\r
+span.big { font-size: 2em; }\r
+span.small { font-size: 0.6em; }\r
+\r
+span.underline { text-decoration: underline; }\r
+span.overline { text-decoration: overline; }\r
+span.line-through { text-decoration: line-through; }\r
+\r
+div.unbreakable { page-break-inside: avoid; }\r
+\r
+\r
+/*\r
+ * xhtml11 specific\r
+ *\r
+ * */\r
+\r
+div.tableblock {\r
+  margin-top: 1.0em;\r
+  margin-bottom: 1.5em;\r
+}\r
+div.tableblock > table {\r
+  border: 3px solid #527bbd;\r
+}\r
+thead, p.table.header {\r
+  font-weight: bold;\r
+  color: #527bbd;\r
+}\r
+p.table {\r
+  margin-top: 0;\r
+}\r
+/* Because the table frame attribute is overriden by CSS in most browsers. */\r
+div.tableblock > table[frame="void"] {\r
+  border-style: none;\r
+}\r
+div.tableblock > table[frame="hsides"] {\r
+  border-left-style: none;\r
+  border-right-style: none;\r
+}\r
+div.tableblock > table[frame="vsides"] {\r
+  border-top-style: none;\r
+  border-bottom-style: none;\r
+}\r
+\r
+\r
+/*\r
+ * html5 specific\r
+ *\r
+ * */\r
+\r
+table.tableblock {\r
+  margin-top: 1.0em;\r
+  margin-bottom: 1.5em;\r
+}\r
+thead, p.tableblock.header {\r
+  font-weight: bold;\r
+  color: #527bbd;\r
+}\r
+p.tableblock {\r
+  margin-top: 0;\r
+}\r
+table.tableblock {\r
+  border-width: 3px;\r
+  border-spacing: 0px;\r
+  border-style: solid;\r
+  border-color: #527bbd;\r
+  border-collapse: collapse;\r
+}\r
+th.tableblock, td.tableblock {\r
+  border-width: 1px;\r
+  padding: 4px;\r
+  border-style: solid;\r
+  border-color: #527bbd;\r
+}\r
+\r
+table.tableblock.frame-topbot {\r
+  border-left-style: hidden;\r
+  border-right-style: hidden;\r
+}\r
+table.tableblock.frame-sides {\r
+  border-top-style: hidden;\r
+  border-bottom-style: hidden;\r
+}\r
+table.tableblock.frame-none {\r
+  border-style: hidden;\r
+}\r
+\r
+th.tableblock.halign-left, td.tableblock.halign-left {\r
+  text-align: left;\r
+}\r
+th.tableblock.halign-center, td.tableblock.halign-center {\r
+  text-align: center;\r
+}\r
+th.tableblock.halign-right, td.tableblock.halign-right {\r
+  text-align: right;\r
+}\r
+\r
+th.tableblock.valign-top, td.tableblock.valign-top {\r
+  vertical-align: top;\r
+}\r
+th.tableblock.valign-middle, td.tableblock.valign-middle {\r
+  vertical-align: middle;\r
+}\r
+th.tableblock.valign-bottom, td.tableblock.valign-bottom {\r
+  vertical-align: bottom;\r
+}\r
+\r
+\r
+/*\r
+ * manpage specific\r
+ *\r
+ * */\r
+\r
+body.manpage h1 {\r
+  padding-top: 0.5em;\r
+  padding-bottom: 0.5em;\r
+  border-top: 2px solid silver;\r
+  border-bottom: 2px solid silver;\r
+}\r
+body.manpage h2 {\r
+  border-style: none;\r
+}\r
+body.manpage div.sectionbody {\r
+  margin-left: 3em;\r
+}\r
+\r
+@media print {\r
+  body.manpage div#toc { display: none; }\r
+}\r
+/* slidy.css\r
+\r
+   Copyright (c) 2005-2010 W3C (MIT, ERCIM, Keio), All Rights Reserved.\r
+   W3C liability, trademark, document use and software licensing\r
+   rules apply, see:\r
+\r
+   http://www.w3.org/Consortium/Legal/copyright-documents\r
+   http://www.w3.org/Consortium/Legal/copyright-software\r
+*/\r
+\r
+/*\r
+   SJR: 2010-09-29: Modified for AsciiDoc slidy backend.\r
+   Mostly just commented out stuff that is handled by AsciiDoc's CSS files.\r
+*/\r
+\r
+body\r
+{\r
+  margin: 0 0 0 0;\r
+  padding: 0 0 0 0;\r
+  width: 100%;\r
+  height: 100%;\r
+  color: black;\r
+  background-color: white;\r
+/*\r
+  font-family: "Gill Sans MT", "Gill Sans", GillSans, sans-serif;\r
+*/\r
+  font-size: 14pt;\r
+}\r
+\r
+div.toolbar {\r
+  position: fixed; z-index: 200;\r
+  top: auto; bottom: 0; left: 0; right: 0;\r
+  height: 1.2em; text-align: right;\r
+  padding-left: 1em;\r
+  padding-right: 1em;\r
+  font-size: 60%;\r
+  color: red;\r
+  background-color: rgb(240,240,240);\r
+  border-top: solid 1px rgb(180,180,180);\r
+}\r
+\r
+div.toolbar span.copyright {\r
+  color: black;\r
+  margin-left: 0.5em;\r
+}\r
+\r
+div.initial_prompt {\r
+  position: absolute;\r
+  z-index: 1000;\r
+  bottom: 1.2em;\r
+  width: 90%;\r
+  background-color: rgb(200,200,200);\r
+  opacity: 0.35;\r
+  background-color: rgb(200,200,200, 0.35);\r
+  cursor: pointer;\r
+}\r
+\r
+div.initial_prompt p.help {\r
+  text-align: center;\r
+}\r
+\r
+div.initial_prompt p.close {\r
+  text-align: right;\r
+  font-style: italic;\r
+}\r
+\r
+div.slidy_toc {\r
+  position: absolute;\r
+  z-index: 300;\r
+  width: 60%;\r
+  max-width: 30em;\r
+  height: 30em;\r
+  overflow: auto;\r
+  top: auto;\r
+  right: auto;\r
+  left: 4em;\r
+  bottom: 4em;\r
+  padding: 1em;\r
+  background: rgb(240,240,240);\r
+  border-style: solid;\r
+  border-width: 2px;\r
+  font-size: 60%;\r
+}\r
+\r
+div.slidy_toc .toc_heading {\r
+  text-align: center;\r
+  width: 100%;\r
+  margin: 0;\r
+  margin-bottom: 1em;\r
+  border-bottom-style: solid;\r
+  border-bottom-color: rgb(180,180,180);\r
+  border-bottom-width: 1px;\r
+}\r
+\r
+div.slide {\r
+  z-index: 20;\r
+  margin: 0 0 0 0;\r
+  padding-top: 0;\r
+  padding-bottom: 0;\r
+  padding-left: 20px;\r
+  padding-right: 20px;\r
+  border-width: 0;\r
+  clear: both;\r
+  top: 0;\r
+  bottom: 0;\r
+  left: 0;\r
+  right: 0;\r
+  line-height: 120%;\r
+  background-color: transparent;\r
+}\r
+\r
+div.background {\r
+  display: none;\r
+}\r
+\r
+div.handout {\r
+  margin-left: 20px;\r
+  margin-right: 20px;\r
+}\r
+\r
+div.slide.titlepage {\r
+  text-align: center;\r
+}\r
+\r
+div.slide.titlepage.h1 {\r
+  padding-top: 10%;\r
+}\r
+\r
+div.slide h1 {\r
+  padding-left: 0;\r
+  padding-right: 20pt;\r
+  padding-top: 4pt;\r
+  padding-bottom: 4pt;\r
+  margin-top: 0;\r
+  margin-left: 0;\r
+  margin-right: 60pt;\r
+  margin-bottom: 0.5em;\r
+  display: block;\r
+  font-size: 160%;\r
+  line-height: 1.2em;\r
+  background: transparent;\r
+}\r
+\r
+div.toc {\r
+  position: absolute;\r
+  top: auto;\r
+  bottom: 4em;\r
+  left: 4em;\r
+  right: auto;\r
+  width: 60%;\r
+  max-width: 30em;\r
+  height: 30em;\r
+  border: solid thin black;\r
+  padding: 1em;\r
+  background: rgb(240,240,240);\r
+  color: black;\r
+  z-index: 300;\r
+  overflow: auto;\r
+  display: block;\r
+  visibility: visible;\r
+}\r
+\r
+div.toc-heading {\r
+  width: 100%;\r
+  border-bottom: solid 1px rgb(180,180,180);\r
+  margin-bottom: 1em;\r
+  text-align: center;\r
+}\r
+\r
+/*\r
+pre {\r
+ font-size: 80%;\r
+ font-weight: bold;\r
+ line-height: 120%;\r
+ padding-top: 0.2em;\r
+ padding-bottom: 0.2em;\r
+ padding-left: 1em;\r
+ padding-right: 1em;\r
+ border-style: solid;\r
+ border-left-width: 1em;\r
+ border-top-width: thin;\r
+ border-right-width: thin;\r
+ border-bottom-width: thin;\r
+ border-color: #95ABD0;\r
+ color: #00428C;\r
+ background-color: #E4E5E7;\r
+}\r
+*/\r
+\r
+/*\r
+li pre { margin-left: 0; }\r
+\r
+blockquote { font-style: italic }\r
+\r
+img { background-color: transparent }\r
+\r
+p.copyright { font-size: smaller }\r
+*/\r
+\r
+.center { text-align: center }\r
+.footnote { font-size: smaller; margin-left: 2em; }\r
+\r
+/*\r
+a img { border-width: 0; border-style: none }\r
+*/\r
+\r
+a:visited { color: navy }\r
+a:link { color: navy }\r
+a:hover { color: red; text-decoration: underline }\r
+a:active { color: red; text-decoration: underline }\r
+\r
+a {text-decoration: none}\r
+.navbar a:link {color: white}\r
+.navbar a:visited {color: yellow}\r
+.navbar a:active {color: red}\r
+.navbar a:hover {color: red}\r
+\r
+/*\r
+ul { list-style-type: square; }\r
+ul ul { list-style-type: disc; }\r
+ul ul ul { list-style-type: circle; }\r
+ul ul ul ul { list-style-type: disc; }\r
+li { margin-left: 0.5em; margin-top: 0.5em; }\r
+li li { font-size: 85%; font-style: italic }\r
+li li li { font-size: 85%; font-style: normal }\r
+*/\r
+\r
+div dt\r
+{\r
+  margin-left: 0;\r
+  margin-top: 1em;\r
+  margin-bottom: 0.5em;\r
+  font-weight: bold;\r
+}\r
+div dd\r
+{\r
+  margin-left: 2em;\r
+  margin-bottom: 0.5em;\r
+}\r
+\r
+\r
+/*\r
+p,pre,ul,ol,blockquote,h2,h3,h4,h5,h6,dl,table {\r
+  margin-left: 1em;\r
+  margin-right: 1em;\r
+}\r
+*/\r
+\r
+p.subhead { font-weight: bold; margin-top: 2em; }\r
+\r
+.smaller { font-size: smaller }\r
+.bigger { font-size: 130% }\r
+\r
+/*\r
+td,th { padding: 0.2em }\r
+*/\r
+\r
+ul {\r
+  margin: 0.5em 1.5em 0.5em 1.5em;\r
+  padding: 0;\r
+}\r
+\r
+ol {\r
+  margin: 0.5em 1.5em 0.5em 1.5em;\r
+  padding: 0;\r
+}\r
+\r
+ul { list-style-type: square; }\r
+ul ul { list-style-type: disc; }\r
+ul ul ul { list-style-type: circle; }\r
+ul ul ul ul { list-style-type: disc; }\r
+\r
+/*\r
+ul li {\r
+  list-style: square;\r
+  margin: 0.1em 0em 0.6em 0;\r
+  padding: 0 0 0 0;\r
+  line-height: 140%;\r
+}\r
+\r
+ol li {\r
+  margin: 0.1em 0em 0.6em 1.5em;\r
+  padding: 0 0 0 0px;\r
+  line-height: 140%;\r
+  list-style-type: decimal;\r
+}\r
+\r
+li ul li {\r
+  font-size: 85%;\r
+  font-style: italic;\r
+  list-style-type: disc;\r
+  background: transparent;\r
+  padding: 0 0 0 0;\r
+}\r
+li li ul li {\r
+  font-size: 85%;\r
+  font-style: normal;\r
+  list-style-type: circle;\r
+  background: transparent;\r
+  padding: 0 0 0 0;\r
+}\r
+li li li ul li {\r
+  list-style-type: disc;\r
+  background: transparent;\r
+  padding: 0 0 0 0;\r
+}\r
+\r
+li ol li {\r
+  list-style-type: decimal;\r
+}\r
+\r
+\r
+li li ol li {\r
+  list-style-type: decimal;\r
+}\r
+*/\r
+\r
+/*\r
+ setting class="outline" on ol or ul makes it behave as an\r
+ ouline list where blocklevel content in li elements is\r
+ hidden by default and can be expanded or collapsed with\r
+ mouse click. Set class="expand" on li to override default\r
+*/\r
+\r
+ol.outline li:hover { cursor: pointer }\r
+ol.outline li.nofold:hover { cursor: default }\r
+\r
+ul.outline li:hover { cursor: pointer }\r
+ul.outline li.nofold:hover { cursor: default }\r
+\r
+ol.outline { list-style:decimal; }\r
+ol.outline ol { list-style-type:lower-alpha }\r
+\r
+ol.outline li.nofold {\r
+  padding: 0 0 0 20px;\r
+  background: transparent url(../graphics/nofold-dim.gif) no-repeat 0px 0.5em;\r
+}\r
+ol.outline li.unfolded {\r
+  padding: 0 0 0 20px;\r
+  background: transparent url(../graphics/fold-dim.gif) no-repeat 0px 0.5em;\r
+}\r
+ol.outline li.folded {\r
+  padding: 0 0 0 20px;\r
+  background: transparent url(../graphics/unfold-dim.gif) no-repeat 0px 0.5em;\r
+}\r
+ol.outline li.unfolded:hover {\r
+  padding: 0 0 0 20px;\r
+  background: transparent url(../graphics/fold.gif) no-repeat 0px 0.5em;\r
+}\r
+ol.outline li.folded:hover {\r
+  padding: 0 0 0 20px;\r
+  background: transparent url(../graphics/unfold.gif) no-repeat 0px 0.5em;\r
+}\r
+\r
+ul.outline li.nofold {\r
+  padding: 0 0 0 20px;\r
+  background: transparent url(../graphics/nofold-dim.gif) no-repeat 0px 0.5em;\r
+}\r
+ul.outline li.unfolded {\r
+  padding: 0 0 0 20px;\r
+  background: transparent url(../graphics/fold-dim.gif) no-repeat 0px 0.5em;\r
+}\r
+ul.outline li.folded {\r
+  padding: 0 0 0 20px;\r
+  background: transparent url(../graphics/unfold-dim.gif) no-repeat 0px 0.5em;\r
+}\r
+ul.outline li.unfolded:hover {\r
+  padding: 0 0 0 20px;\r
+  background: transparent url(../graphics/fold.gif) no-repeat 0px 0.5em;\r
+}\r
+ul.outline li.folded:hover {\r
+  padding: 0 0 0 20px;\r
+  background: transparent url(../graphics/unfold.gif) no-repeat 0px 0.5em;\r
+}\r
+\r
+/* for slides with class "title" in table of contents */\r
+a.titleslide { font-weight: bold; font-style: italic }\r
+\r
+/*\r
+ hide images for work around for save as bug\r
+ where browsers fail to save images used by CSS\r
+*/\r
+img.hidden { display: none; visibility: hidden }\r
+div.initial_prompt { display: none; visibility: hidden }\r
+\r
+  div.slide {\r
+     visibility: visible;\r
+     position: inherit;\r
+  }\r
+  div.handout {\r
+     border-top-style: solid;\r
+     border-top-width: thin;\r
+     border-top-color: black;\r
+  }\r
+\r
+@media screen {\r
+  .hidden { display: none; visibility: visible }\r
+\r
+  div.slide.hidden { display: block; visibility: visible }\r
+  div.handout.hidden { display: block; visibility: visible }\r
+  div.background { display: none; visibility: hidden }\r
+  body.single_slide div.initial_prompt { display: block; visibility: visible }\r
+  body.single_slide div.background { display: block; visibility: visible }\r
+  body.single_slide div.background.hidden { display: none; visibility: hidden }\r
+  body.single_slide .invisible { visibility: hidden }\r
+  body.single_slide .hidden { display: none; visibility: hidden }\r
+  body.single_slide div.slide { position: absolute }\r
+  body.single_slide div.handout { display: none; visibility: hidden }\r
+}\r
+\r
+@media print {\r
+  .hidden { display: block; visibility: visible }\r
+\r
+/*\r
+  div.slide pre { font-size: 60%; padding-left: 0.5em; }\r
+*/\r
+  div.toolbar { display: none; visibility: hidden; }\r
+  div.slidy_toc { display: none; visibility: hidden; }\r
+  div.background { display: none; visibility: hidden; }\r
+  div.slide { page-break-before: always }\r
+  /* :first-child isn't reliable for print media */\r
+  div.slide.first-slide { page-break-before: avoid }\r
+}\r
+\r
+\r
+/* SJR: AsciiDoc slidy backend tweaks */\r
+\r
+ol, ul {\r
+  margin: 0.8em 1.5em 0.8em 1.8em;\r
+}\r
+li > ul, li > ol {\r
+  margin-top: 0.5em;\r
+}\r
+\r
+.outline > li.folded,\r
+.outline > li.unfolded {\r
+  color: #527bbd;\r
+}\r
+ul > li{ color: #aaa; }\r
+ul > li > *, ol > li > * { color: black; }\r
+\r
+li {\r
+  margin-top: 0.5em;\r
+  margin-bottom: 0.5em;\r
+}\r
+\r
+\r
+</style>\r
+<script type="text/javascript">\r
+/*<![CDATA[*/\r
+/* slidy.js\r
+\r
+   Copyright (c) 2005-2010 W3C (MIT, ERCIM, Keio), All Rights Reserved.\r
+   W3C liability, trademark, document use and software licensing\r
+   rules apply, see:\r
+\r
+   http://www.w3.org/Consortium/Legal/copyright-documents\r
+   http://www.w3.org/Consortium/Legal/copyright-software\r
+*/\r
+\r
+// the slidy object implementation\r
+var w3c_slidy = {\r
+  // classify which kind of browser we're running under\r
+  ns_pos: (typeof window.pageYOffset!='undefined'),\r
+  khtml: ((navigator.userAgent).indexOf("KHTML") >= 0 ? true : false),\r
+  opera: ((navigator.userAgent).indexOf("Opera") >= 0 ? true : false),\r
+  ipad: ((navigator.userAgent).indexOf("iPad") >= 0 ? true : false),\r
+  iphone: ((navigator.userAgent).indexOf("iPhone") >= 0 ? true : false),\r
+  ie: (typeof document.all != "undefined" && !this.opera),\r
+  ie6: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 6") != -1),\r
+  ie7: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 7") != -1),\r
+  ie8: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 8") != -1),\r
+  ie9: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 9") != -1),\r
+  keyboardless: (this.ipad || this.iphone),\r
+\r
+  // are we running as XHTML? (doesn't work on Opera)\r
+  is_xhtml: /xml/.test(document.contentType),\r
+\r
+  slide_number: 0, // integer slide count: 0, 1, 2, ...\r
+  slide_number_element: null, // element containing slide number\r
+  slides: [], // set to array of slide div's\r
+  notes: [], // set to array of handout div's\r
+  backgrounds: [], // set to array of background div's\r
+  toolbar: null, // element containing toolbar\r
+  title: null, // document title\r
+  last_shown: null, // last incrementally shown item\r
+  eos: null,  // span element for end of slide indicator\r
+  toc: null, // table of contents\r
+  outline: null, // outline element with the focus\r
+  selected_text_len: 0, // length of drag selection on document\r
+  view_all: 0,  // 1 to view all slides + handouts\r
+  want_toolbar: true,  // user preference to show/hide toolbar\r
+  mouse_click_enabled: true, // enables left click for next slide\r
+  scroll_hack: 0, // IE work around for position: fixed\r
+  disable_slide_click: false,  // used by clicked anchors\r
+\r
+  lang: "en", // updated to language specified by html file\r
+\r
+  help_anchor: null, // used for keyboard focus hack in showToolbar()\r
+  help_page: "http://www.w3.org/Talks/Tools/Slidy2/help/help.html",\r
+  help_text: "Navigate with mouse click, space bar, Cursor Left/Right, " +\r
+             "or Pg Up and Pg Dn. Use S and B to change font size.",\r
+\r
+  size_index: 0,\r
+  size_adjustment: 0,\r
+  sizes:  new Array("10pt", "12pt", "14pt", "16pt", "18pt", "20pt",\r
+                    "22pt", "24pt", "26pt", "28pt", "30pt", "32pt"),\r
+\r
+  // needed for efficient resizing\r
+  last_width: 0,\r
+  last_height: 0,\r
+\r
+\r
+  // Needed for cross browser support for relative width/height on\r
+  // object elements. The work around is to save width/height attributes\r
+  // and then to recompute absolute width/height dimensions on resizing\r
+   objects: [],\r
+\r
+  // attach initialiation event handlers\r
+  set_up: function () {\r
+    var init = function() { w3c_slidy.init(); };\r
+    if (typeof window.addEventListener != "undefined")\r
+      window.addEventListener("load", init, false);\r
+    else\r
+      window.attachEvent("onload", init);\r
+  },\r
+\r
+  hide_slides: function () {\r
+    if (document.body && !w3c_slidy.initialized)\r
+      document.body.style.visibility = "hidden";\r
+    else\r
+      setTimeout(w3c_slidy.hide_slides, 50);\r
+  },\r
+\r
+  // hack to persuade IE to compute correct document height\r
+  // as needed for simulating fixed positioning of toolbar\r
+  ie_hack: function () {\r
+    window.resizeBy(0,-1);\r
+    window.resizeBy(0, 1);\r
+  },\r
+\r
+  init: function () {\r
+    //alert("slidy starting test 10");\r
+    document.body.style.visibility = "visible";\r
+    w3c_slidy_i18n.init();\r
+    this.add_toolbar();\r
+    this.wrap_implicit_slides();\r
+    this.collect_slides();\r
+    this.collect_notes();\r
+    this.collect_backgrounds();\r
+    this.objects = document.body.getElementsByTagName("object");\r
+    this.patch_anchors();\r
+    this.slide_number = this.find_slide_number(location.href);\r
+    window.offscreenbuffering = true;\r
+    this.size_adjustment = this.find_size_adjust();\r
+    this.time_left = this.find_duration();\r
+    this.hide_image_toolbar();  // suppress IE image toolbar popup\r
+    this.init_outliner();  // activate fold/unfold support\r
+    this.title = document.title;\r
+\r
+    // work around for opera bug\r
+    this.is_xhtml = (document.body.tagName == "BODY" ? false : true);\r
+\r
+    if (this.slides.length > 0)\r
+    {\r
+      var slide = this.slides[this.slide_number];\r
+\r
+      if (this.slide_number > 0)\r
+      {\r
+        this.set_visibility_all_incremental("visible");\r
+        this.last_shown = this.previous_incremental_item(null);\r
+        this.set_eos_status(true);\r
+      }\r
+      else\r
+      {\r
+        this.last_shown = null;\r
+        this.set_visibility_all_incremental("hidden");\r
+        this.set_eos_status(!this.next_incremental_item(this.last_shown));\r
+      }\r
+\r
+      this.set_location();\r
+      this.add_class(this.slides[0], "first-slide");\r
+      w3c_slidy.show_slide(slide);\r
+    }\r
+\r
+    this.toc = this.table_of_contents();\r
+\r
+    this.add_initial_prompt();\r
+\r
+    // bind event handlers without interfering with custom page scripts\r
+    // Tap events behave too weirdly to support clicks reliably on\r
+    // iPhone and iPad, so exclude these from click handler\r
+\r
+    if (!this.keyboardless)\r
+      this.add_listener(document.body, "click", this.mouse_button_click);\r
+\r
+    this.add_listener(document, "keydown", this.key_down);\r
+    this.add_listener(document, "keypress", this.key_press);\r
+    this.add_listener(window, "resize", this.resized);\r
+    this.add_listener(window, "scroll", this.scrolled);\r
+    this.add_listener(window, "unload", this.unloaded);\r
+\r
+    if (!document.body.onclick)\r
+      document.body.onclick = function () { };\r
+\r
+    this.single_slide_view();\r
+\r
+    //this.set_location();\r
+\r
+    this.resized();\r
+\r
+    if (this.ie7)\r
+      setTimeout(w3c_slidy.ie_hack, 100);\r
+\r
+    this.show_toolbar();\r
+\r
+    // for back button detection\r
+    setInterval(function () { w3c_slidy.check_location(); }, 200);\r
+    w3c_slidy.initialized = true;\r
+  },\r
+\r
+  // create div element with links to each slide\r
+  table_of_contents: function () {\r
+    var toc = this.create_element("div");\r
+    this.add_class(toc, "slidy_toc hidden");\r
+    //toc.setAttribute("tabindex", "0");\r
+\r
+    var heading = this.create_element("div");\r
+    this.add_class(heading, "toc-heading");\r
+    heading.innerHTML = "Table of Contents".localize();\r
+\r
+    toc.appendChild(heading);\r
+    var previous = null;\r
+\r
+    for (var i = 0; i < this.slides.length; ++i)\r
+    {\r
+      var title = this.has_class(this.slides[i], "title");\r
+      var num = document.createTextNode((i + 1) + ". ");\r
+\r
+      toc.appendChild(num);\r
+\r
+      var a = this.create_element("a");\r
+      a.setAttribute("href", "#(" + (i+1) + ")");\r
+\r
+      if (title)\r
+        this.add_class(a, "titleslide");\r
+\r
+      var name = document.createTextNode(this.slide_name(i));\r
+      a.appendChild(name);\r
+      a.onclick = w3c_slidy.toc_click;\r
+      a.onkeydown = w3c_slidy.toc_keydown;\r
+      a.previous = previous;\r
+\r
+      if (previous)\r
+        previous.next = a;\r
+\r
+      toc.appendChild(a);\r
+\r
+      if (i == 0)\r
+        toc.first = a;\r
+\r
+      if (i < this.slides.length - 1)\r
+      {\r
+        var br = this.create_element("br");\r
+        toc.appendChild(br);\r
+      }\r
+\r
+      previous = a;\r
+    }\r
+\r
+    toc.focus = function () {\r
+      if (this.first)\r
+        this.first.focus();\r
+    }\r
+\r
+    toc.onmouseup = w3c_slidy.mouse_button_up;\r
+\r
+    toc.onclick = function (e) {\r
+      e||(e=window.event);\r
+\r
+      if (w3c_slidy.selected_text_len <= 0)\r
+         w3c_slidy.hide_table_of_contents();\r
+\r
+      w3c_slidy.stop_propagation(e);\r
+\r
+      if (e.cancel != undefined)\r
+        e.cancel = true;\r
+\r
+      if (e.returnValue != undefined)\r
+        e.returnValue = false;\r
+\r
+      return false;\r
+    };\r
+\r
+    document.body.insertBefore(toc, document.body.firstChild);\r
+    return toc;\r
+  },\r
+\r
+  is_shown_toc: function () {\r
+    return !w3c_slidy.has_class(w3c_slidy.toc, "hidden");\r
+  },\r
+\r
+  show_table_of_contents: function () {\r
+    w3c_slidy.remove_class(w3c_slidy.toc, "hidden");\r
+    var toc = w3c_slidy.toc;\r
+    toc.focus();\r
+\r
+    if (w3c_slidy.ie7 && w3c_slidy.slide_number == 0)\r
+      setTimeout(w3c_slidy.ie_hack, 100);\r
+  },\r
+\r
+  hide_table_of_contents: function () {\r
+    w3c_slidy.add_class(w3c_slidy.toc, "hidden");\r
+\r
+    if (!w3c_slidy.opera)\r
+      w3c_slidy.help_anchor.focus();\r
+  },\r
+\r
+  toggle_table_of_contents: function () {\r
+    if (w3c_slidy.is_shown_toc())\r
+      w3c_slidy.hide_table_of_contents();\r
+    else\r
+      w3c_slidy.show_table_of_contents();\r
+  },\r
+\r
+  // called on clicking toc entry\r
+  toc_click: function (e) {\r
+    if (!e)\r
+      e = window.event;\r
+\r
+    var target = w3c_slidy.get_target(e);\r
+\r
+    if (target && target.nodeType == 1)\r
+    {\r
+      var uri = target.getAttribute("href");\r
+\r
+      if (uri)\r
+      {\r
+        //alert("going to " + uri);\r
+        var slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+        w3c_slidy.hide_slide(slide);\r
+        w3c_slidy.slide_number = w3c_slidy.find_slide_number(uri);\r
+        slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+        w3c_slidy.last_shown = null;\r
+        w3c_slidy.set_location();\r
+        w3c_slidy.set_visibility_all_incremental("hidden");\r
+        w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown));\r
+        w3c_slidy.show_slide(slide);\r
+        //target.focus();\r
+\r
+        try\r
+        {\r
+          if (!w3c_slidy.opera)\r
+            w3c_slidy.help_anchor.focus();\r
+        }\r
+        catch (e)\r
+        {\r
+        }\r
+      }\r
+    }\r
+\r
+    w3c_slidy.hide_table_of_contents(e);\r
+    if (w3c_slidy.ie7) w3c_slidy.ie_hack();\r
+    w3c_slidy.stop_propagation(e);\r
+    return w3c_slidy.cancel(e);\r
+  },\r
+\r
+  // called onkeydown for toc entry\r
+  toc_keydown: function (event) {\r
+    var key;\r
+\r
+    if (!event)\r
+      var event = window.event;\r
+\r
+    // kludge around NS/IE differences\r
+    if (window.event)\r
+      key = window.event.keyCode;\r
+    else if (event.which)\r
+      key = event.which;\r
+    else\r
+      return true; // Yikes! unknown browser\r
+\r
+    // ignore event if key value is zero\r
+    // as for alt on Opera and Konqueror\r
+    if (!key)\r
+      return true;\r
+\r
+    // check for concurrent control/command/alt key\r
+    // but are these only present on mouse events?\r
+\r
+    if (event.ctrlKey || event.altKey)\r
+      return true;\r
+\r
+    if (key == 13)\r
+    {\r
+      var uri = this.getAttribute("href");\r
+\r
+      if (uri)\r
+      {\r
+        //alert("going to " + uri);\r
+       var slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+        w3c_slidy.hide_slide(slide);\r
+        w3c_slidy.slide_number = w3c_slidy.find_slide_number(uri);\r
+        slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+        w3c_slidy.last_shown = null;\r
+        w3c_slidy.set_location();\r
+        w3c_slidy.set_visibility_all_incremental("hidden");\r
+        w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown));\r
+        w3c_slidy.show_slide(slide);\r
+        //target.focus();\r
+\r
+        try\r
+        {\r
+          if (!w3c_slidy.opera)\r
+            w3c_slidy.help_anchor.focus();\r
+        }\r
+        catch (e)\r
+        {\r
+        }\r
+      }\r
+\r
+      w3c_slidy.hide_table_of_contents();\r
+\r
+      if (self.ie7)\r
+       w3c_slidy.ie_hack();\r
+\r
+      return w3c_slidy.cancel(event);\r
+    }\r
+\r
+    if (key == 40 && this.next)\r
+    {\r
+      this.next.focus();\r
+      return w3c_slidy.cancel(event);\r
+    }\r
+\r
+    if (key == 38 && this.previous)\r
+    {\r
+      this.previous.focus();\r
+      return w3c_slidy.cancel(event);\r
+    }\r
+\r
+    return true;\r
+  },\r
+\r
+\r
+  // ### OBSOLETE ###\r
+  before_print: function () {\r
+    this.show_all_slides();\r
+    this.hide_toolbar();\r
+    alert("before print");\r
+  },\r
+\r
+  // ### OBSOLETE ###\r
+  after_print: function () {\r
+    if (!this.view_all)\r
+    {\r
+      this.single_slide_view();\r
+      this.show_toolbar();\r
+    }\r
+    alert("after print");\r
+  },\r
+\r
+  // ### OBSOLETE ###\r
+  print_slides: function () {\r
+    this.before_print();\r
+    window.print();\r
+    this.after_print();\r
+  },\r
+\r
+  // ### OBSOLETE ?? ###\r
+  toggle_view: function () {\r
+    if (this.view_all)\r
+    {\r
+      this.single_slide_view();\r
+      this.show_toolbar();\r
+      this.view_all = 0;\r
+    }\r
+    else\r
+    {\r
+      this.show_all_slides();\r
+      this.hide_toolbar();\r
+      this.view_all = 1;\r
+    }\r
+  },\r
+\r
+  // prepare for printing  ### OBSOLETE ###\r
+  show_all_slides: function () {\r
+    this.remove_class(document.body, "single_slide");\r
+    this.set_visibility_all_incremental("visible");\r
+  },\r
+\r
+  // restore after printing  ### OBSOLETE ###\r
+  single_slide_view: function () {\r
+    this.add_class(document.body, "single_slide");\r
+    this.set_visibility_all_incremental("visible");\r
+    this.last_shown = this.previous_incremental_item(null);\r
+  },\r
+\r
+  // suppress IE's image toolbar pop up\r
+  hide_image_toolbar: function () {\r
+    if (!this.ns_pos)\r
+    {\r
+      var images = document.getElementsByTagName("IMG");\r
+\r
+      for (var i = 0; i < images.length; ++i)\r
+        images[i].setAttribute("galleryimg", "no");\r
+    }\r
+  },\r
+\r
+  unloaded: function (e) {\r
+    //alert("unloaded");\r
+  },\r
+\r
+  // Safari and Konqueror don't yet support getComputedStyle()\r
+  // and they always reload page when location.href is updated\r
+  is_KHTML: function () {\r
+    var agent = navigator.userAgent;\r
+    return (agent.indexOf("KHTML") >= 0 ? true : false);\r
+  },\r
+\r
+  // find slide name from first h1 element\r
+  // default to document title + slide number\r
+  slide_name: function (index) {\r
+    var name = null;\r
+    var slide = this.slides[index];\r
+\r
+    var heading = this.find_heading(slide);\r
+\r
+    if (heading)\r
+      name = this.extract_text(heading);\r
+\r
+    if (!name)\r
+      name = this.title + "(" + (index + 1) + ")";\r
+\r
+    name.replace(/\&/g, "&amp;");\r
+    name.replace(/\</g, "&lt;");\r
+    name.replace(/\>/g, "&gt;");\r
+\r
+    return name;\r
+  },\r
+\r
+  // find first h1 element in DOM tree\r
+  find_heading: function (node) {\r
+    if (!node || node.nodeType != 1)\r
+      return null;\r
+\r
+    if (node.nodeName == "H1" || node.nodeName == "h1")\r
+      return node;\r
+\r
+    var child = node.firstChild;\r
+\r
+    while (child)\r
+    {\r
+      node = this.find_heading(child);\r
+\r
+      if (node)\r
+        return node;\r
+\r
+      child = child.nextSibling;\r
+    }\r
+\r
+    return null;\r
+  },\r
+\r
+  // recursively extract text from DOM tree\r
+  extract_text: function (node) {\r
+    if (!node)\r
+      return "";\r
+\r
+    // text nodes\r
+    if (node.nodeType == 3)\r
+      return node.nodeValue;\r
+\r
+    // elements\r
+    if (node.nodeType == 1)\r
+    {\r
+      node = node.firstChild;\r
+      var text = "";\r
+\r
+      while (node)\r
+      {\r
+        text = text + this.extract_text(node);\r
+        node = node.nextSibling;\r
+      }\r
+\r
+      return text;\r
+    }\r
+\r
+    return "";\r
+  },\r
+\r
+  // find copyright text from meta element\r
+  find_copyright: function () {\r
+    var name, content;\r
+    var meta = document.getElementsByTagName("meta");\r
+\r
+    for (var i = 0; i < meta.length; ++i)\r
+    {\r
+      name = meta[i].getAttribute("name");\r
+      content = meta[i].getAttribute("content");\r
+\r
+      if (name == "copyright")\r
+        return content;\r
+    }\r
+\r
+    return null;\r
+  },\r
+\r
+  find_size_adjust: function () {\r
+    var name, content, offset;\r
+    var meta = document.getElementsByTagName("meta");\r
+\r
+    for (var i = 0; i < meta.length; ++i)\r
+    {\r
+      name = meta[i].getAttribute("name");\r
+      content = meta[i].getAttribute("content");\r
+\r
+      if (name == "font-size-adjustment")\r
+        return 1 * content;\r
+    }\r
+\r
+    return 1;\r
+  },\r
+\r
+  // <meta name="duration" content="20" />  for 20 minutes\r
+  find_duration: function () {\r
+    var name, content, offset;\r
+    var meta = document.getElementsByTagName("meta");\r
+\r
+    for (var i = 0; i < meta.length; ++i)\r
+    {\r
+      name = meta[i].getAttribute("name");\r
+      content = meta[i].getAttribute("content");\r
+\r
+      if (name == "duration")\r
+        return 60000 * content;\r
+    }\r
+\r
+    return null;\r
+  },\r
+\r
+  replace_by_non_breaking_space: function (str) {\r
+    for (var i = 0; i < str.length; ++i)\r
+      str[i] = 160;\r
+  },\r
+\r
+  // ### CHECK ME ### is use of "li" okay for text/html?\r
+  // for XHTML do we also need to specify namespace?\r
+  init_outliner: function () {\r
+    var items = document.getElementsByTagName("li");\r
+\r
+    for (var i = 0; i < items.length; ++i)\r
+    {\r
+      var target = items[i];\r
+\r
+      if (!this.has_class(target.parentNode, "outline"))\r
+        continue;\r
+\r
+      target.onclick = this.outline_click;\r
+/* ### more work needed for IE6\r
+      if (!this.ns_pos)\r
+      {\r
+        target.onmouseover = this.hover_outline;\r
+        target.onmouseout = this.unhover_outline;\r
+      }\r
+*/\r
+      if (this.foldable(target))\r
+      {\r
+        target.foldable = true;\r
+        target.onfocus = function () {w3c_slidy.outline = this;};\r
+        target.onblur = function () {w3c_slidy.outline = null;};\r
+\r
+        if (!target.getAttribute("tabindex"))\r
+          target.setAttribute("tabindex", "0");\r
+\r
+        if (this.has_class(target, "expand"))\r
+          this.unfold(target);\r
+        else\r
+          this.fold(target);\r
+      }\r
+      else\r
+      {\r
+        this.add_class(target, "nofold");\r
+        target.visible = true;\r
+        target.foldable = false;\r
+      }\r
+    }\r
+  },\r
+\r
+  foldable: function (item) {\r
+    if (!item || item.nodeType != 1)\r
+      return false;\r
+\r
+    var node = item.firstChild;\r
+\r
+    while (node)\r
+    {\r
+      if (node.nodeType == 1 && this.is_block(node))\r
+        return true;\r
+\r
+      node = node.nextSibling;\r
+    }\r
+\r
+    return false;\r
+  },\r
+\r
+  // ### CHECK ME ### switch to add/remove "hidden" class\r
+  fold: function (item) {\r
+    if (item)\r
+    {\r
+      this.remove_class(item, "unfolded");\r
+      this.add_class(item, "folded");\r
+    }\r
+\r
+    var node = item ? item.firstChild : null;\r
+\r
+    while (node)\r
+    {\r
+      if (node.nodeType == 1 && this.is_block(node)) // element\r
+      {\r
+         w3c_slidy.add_class(node, "hidden");\r
+      }\r
+\r
+      node = node.nextSibling;\r
+    }\r
+\r
+    item.visible = false;\r
+  },\r
+\r
+  // ### CHECK ME ### switch to add/remove "hidden" class\r
+  unfold: function (item) {\r
+    if (item)\r
+    {\r
+      this.add_class(item, "unfolded");\r
+      this.remove_class(item, "folded");\r
+    }\r
+\r
+    var node = item ? item.firstChild : null;\r
+\r
+    while (node)\r
+    {\r
+      if (node.nodeType == 1 && this.is_block(node)) // element\r
+      {\r
+        w3c_slidy.remove_class(node, "hidden");\r
+      }\r
+\r
+      node = node.nextSibling;\r
+    }\r
+\r
+    item.visible = true;\r
+  },\r
+\r
+  outline_click: function (e) {\r
+    if (!e)\r
+      e = window.event;\r
+\r
+    var rightclick = false;\r
+    var target = w3c_slidy.get_target(e);\r
+\r
+    while (target && target.visible == undefined)\r
+      target = target.parentNode;\r
+\r
+    if (!target)\r
+      return true;\r
+\r
+    if (e.which)\r
+      rightclick = (e.which == 3);\r
+    else if (e.button)\r
+      rightclick = (e.button == 2);\r
+\r
+    if (!rightclick && target.visible != undefined)\r
+    {\r
+      if (target.foldable)\r
+      {\r
+        if (target.visible)\r
+          w3c_slidy.fold(target);\r
+        else\r
+          w3c_slidy.unfold(target);\r
+      }\r
+\r
+      w3c_slidy.stop_propagation(e);\r
+      e.cancel = true;\r
+      e.returnValue = false;\r
+    }\r
+\r
+    return false;\r
+  },\r
+\r
+  add_initial_prompt: function () {\r
+    var prompt = this.create_element("div");\r
+    prompt.setAttribute("class", "initial_prompt");\r
+\r
+    var p1 = this.create_element("p");\r
+    prompt.appendChild(p1);\r
+    p1.setAttribute("class", "help");\r
+\r
+    if (this.keyboardless)\r
+      p1.innerHTML = "Tap footer to move to next slide";\r
+    else\r
+      p1.innerHTML = "Space or Right Arrow to move to next " +\r
+                     "slide, click help below for more details";\r
+\r
+    this.add_listener(prompt, "click", function (e) {\r
+      document.body.removeChild(prompt);\r
+      w3c_slidy.stop_propagation(e);\r
+\r
+      if (e.cancel != undefined)\r
+        e.cancel = true;\r
+\r
+      if (e.returnValue != undefined)\r
+        e.returnValue = false;\r
+\r
+      return false;\r
+    });\r
+\r
+    document.body.appendChild(prompt);\r
+    this.initial_prompt = prompt;\r
+    setTimeout(function() {document.body.removeChild(prompt);}, 5000);\r
+  },\r
+\r
+  add_toolbar: function () {\r
+    var counter, page;\r
+\r
+     this.toolbar = this.create_element("div");\r
+     this.toolbar.setAttribute("class", "toolbar");\r
+\r
+     // a reasonably behaved browser\r
+     if (this.ns_pos || !this.ie6)\r
+     {\r
+       var right = this.create_element("div");\r
+       right.setAttribute("style", "float: right; text-align: right");\r
+\r
+       counter = this.create_element("span")\r
+       counter.innerHTML = "slide".localize() + " n/m";\r
+       right.appendChild(counter);\r
+       this.toolbar.appendChild(right);\r
+\r
+       var left = this.create_element("div");\r
+       left.setAttribute("style", "text-align: left");\r
+\r
+       // global end of slide indicator\r
+       this.eos = this.create_element("span");\r
+       this.eos.innerHTML = "* ";\r
+       left.appendChild(this.eos);\r
+\r
+       var help = this.create_element("a");\r
+       help.setAttribute("href", this.help_page);\r
+       help.setAttribute("title", this.help_text.localize());\r
+       help.innerHTML = "help?".localize();\r
+       left.appendChild(help);\r
+       this.help_anchor = help;  // save for focus hack\r
+\r
+       var gap1 = document.createTextNode(" ");\r
+       left.appendChild(gap1);\r
+\r
+       var contents = this.create_element("a");\r
+       contents.setAttribute("href", "javascript:w3c_slidy.toggle_table_of_contents()");\r
+       contents.setAttribute("title", "table of contents".localize());\r
+       contents.innerHTML = "contents?".localize();\r
+       left.appendChild(contents);\r
+\r
+       var gap2 = document.createTextNode(" ");\r
+       left.appendChild(gap2);\r
+\r
+       var copyright = this.find_copyright();\r
+\r
+       if (copyright)\r
+       {\r
+         var span = this.create_element("span");\r
+         span.className = "copyright";\r
+         span.innerHTML = copyright;\r
+         left.appendChild(span);\r
+       }\r
+\r
+       this.toolbar.setAttribute("tabindex", "0");\r
+       this.toolbar.appendChild(left);\r
+     }\r
+     else // IE6 so need to work around its poor CSS support\r
+     {\r
+       this.toolbar.style.position = (this.ie7 ? "fixed" : "absolute");\r
+       this.toolbar.style.zIndex = "200";\r
+       this.toolbar.style.width = "99.9%";\r
+       this.toolbar.style.height = "1.2em";\r
+       this.toolbar.style.top = "auto";\r
+       this.toolbar.style.bottom = "0";\r
+       this.toolbar.style.left = "0";\r
+       this.toolbar.style.right = "0";\r
+       this.toolbar.style.textAlign = "left";\r
+       this.toolbar.style.fontSize = "60%";\r
+       this.toolbar.style.color = "red";\r
+       this.toolbar.borderWidth = 0;\r
+       this.toolbar.className = "toolbar";\r
+       this.toolbar.style.background = "rgb(240,240,240)";\r
+\r
+       // would like to have help text left aligned\r
+       // and page counter right aligned, floating\r
+       // div's don't work, so instead use nested\r
+       // absolutely positioned div's.\r
+\r
+       var sp = this.create_element("span");\r
+       sp.innerHTML = "&nbsp;&nbsp;*&nbsp;";\r
+       this.toolbar.appendChild(sp);\r
+       this.eos = sp;  // end of slide indicator\r
+\r
+       var help = this.create_element("a");\r
+       help.setAttribute("href", this.help_page);\r
+       help.setAttribute("title", this.help_text.localize());\r
+       help.innerHTML = "help?".localize();\r
+       this.toolbar.appendChild(help);\r
+       this.help_anchor = help;  // save for focus hack\r
+\r
+       var gap1 = document.createTextNode(" ");\r
+       this.toolbar.appendChild(gap1);\r
+\r
+       var contents = this.create_element("a");\r
+       contents.setAttribute("href", "javascript:toggleTableOfContents()");\r
+       contents.setAttribute("title", "table of contents".localize());\r
+       contents.innerHTML = "contents?".localize();\r
+       this.toolbar.appendChild(contents);\r
+\r
+       var gap2 = document.createTextNode(" ");\r
+       this.toolbar.appendChild(gap2);\r
+\r
+       var copyright = this.find_copyright();\r
+\r
+       if (copyright)\r
+       {\r
+         var span = this.create_element("span");\r
+         span.innerHTML = copyright;\r
+         span.style.color = "black";\r
+         span.style.marginLeft = "0.5em";\r
+         this.toolbar.appendChild(span);\r
+       }\r
+\r
+       counter = this.create_element("div")\r
+       counter.style.position = "absolute";\r
+       counter.style.width = "auto"; //"20%";\r
+       counter.style.height = "1.2em";\r
+       counter.style.top = "auto";\r
+       counter.style.bottom = 0;\r
+       counter.style.right = "0";\r
+       counter.style.textAlign = "right";\r
+       counter.style.color = "red";\r
+       counter.style.background = "rgb(240,240,240)";\r
+\r
+       counter.innerHTML = "slide".localize() + " n/m";\r
+       this.toolbar.appendChild(counter);\r
+     }\r
+\r
+     // ensure that click isn't passed through to the page\r
+     this.toolbar.onclick =\r
+         function (e) {\r
+           if (!e)\r
+             e = window.event;\r
+\r
+           var target = e.target;\r
+\r
+           if (!target && e.srcElement)\r
+             target = e.srcElement;\r
+\r
+           // work around Safari bug\r
+           if (target && target.nodeType == 3)\r
+             target = target.parentNode;\r
+\r
+           w3c_slidy.stop_propagation(e);\r
+\r
+           if (target && target.nodeName.toLowerCase() != "a")\r
+             w3c_slidy.mouse_button_click(e);\r
+         };\r
+\r
+     this.slide_number_element = counter;\r
+     this.set_eos_status(false);\r
+     document.body.appendChild(this.toolbar);\r
+  },\r
+\r
+  // wysiwyg editors make it hard to use div elements\r
+  // e.g. amaya loses the div when you copy and paste\r
+  // this function wraps div elements around implicit\r
+  // slides which start with an h1 element and continue\r
+  // up to the next heading or div element\r
+  wrap_implicit_slides: function () {\r
+    var i, heading, node, next, div;\r
+    var headings = document.getElementsByTagName("h1");\r
+\r
+    if (!headings)\r
+      return;\r
+\r
+    for (i = 0; i < headings.length; ++i)\r
+    {\r
+      heading = headings[i];\r
+\r
+      if (heading.parentNode != document.body)\r
+        continue;\r
+\r
+      node = heading.nextSibling;\r
+\r
+      div = document.createElement("div");\r
+      this.add_class(div, "slide");\r
+      document.body.replaceChild(div, heading);\r
+      div.appendChild(heading);\r
+\r
+      while (node)\r
+      {\r
+        if (node.nodeType == 1 &&    // an element\r
+             (node.nodeName == "H1" ||\r
+              node.nodeName == "h1" ||\r
+              node.nodeName == "DIV" ||\r
+              node.nodeName == "div"))\r
+          break;\r
+\r
+        next = node.nextSibling;\r
+        node = document.body.removeChild(node);\r
+        div.appendChild(node);\r
+        node = next;\r
+      }\r
+    }\r
+  },\r
+\r
+// return new array of all slides\r
+  collect_slides: function () {\r
+    var slides = new Array();\r
+    var divs = document.body.getElementsByTagName("div");\r
+\r
+    for (var i = 0; i < divs.length; ++i)\r
+    {\r
+      div = divs.item(i);\r
+\r
+      if (this.has_class(div, "slide"))\r
+      {\r
+        // add slide to collection\r
+        slides[slides.length] = div;\r
+\r
+        // hide each slide as it is found\r
+        this.add_class(div, "hidden");\r
+\r
+        // add dummy <br/> at end for scrolling hack\r
+        var node1 = document.createElement("br");\r
+        div.appendChild(node1);\r
+        var node2 = document.createElement("br");\r
+        div.appendChild(node2);\r
+      }\r
+      else if (this.has_class(div, "background"))\r
+      {  // work around for Firefox SVG reload bug\r
+        // which otherwise replaces 1st SVG graphic with 2nd\r
+        div.style.display = "block";\r
+      }\r
+    }\r
+\r
+    this.slides = slides;\r
+  },\r
+\r
+  // return new array of all <div class="handout">\r
+  collect_notes: function () {\r
+    var notes = new Array();\r
+    var divs = document.body.getElementsByTagName("div");\r
+\r
+    for (var i = 0; i < divs.length; ++i)\r
+    {\r
+      div = divs.item(i);\r
+\r
+      if (this.has_class(div, "handout"))\r
+      {\r
+        // add note to collection\r
+        notes[notes.length] = div;\r
+\r
+        // and hide it\r
+        this.add_class(div, "hidden");\r
+      }\r
+    }\r
+\r
+    this.notes = notes;\r
+  },\r
+\r
+  // return new array of all <div class="background">\r
+  // including named backgrounds e.g. class="background titlepage"\r
+  collect_backgrounds: function () {\r
+    var backgrounds = new Array();\r
+    var divs = document.body.getElementsByTagName("div");\r
+\r
+    for (var i = 0; i < divs.length; ++i)\r
+    {\r
+      div = divs.item(i);\r
+\r
+      if (this.has_class(div, "background"))\r
+      {\r
+        // add background to collection\r
+        backgrounds[backgrounds.length] = div;\r
+\r
+        // and hide it\r
+        this.add_class(div, "hidden");\r
+      }\r
+    }\r
+\r
+    this.backgrounds = backgrounds;\r
+  },\r
+\r
+  // set click handlers on all anchors\r
+  patch_anchors: function () {\r
+    var self = w3c_slidy;\r
+    var handler = function (event) {\r
+      // compare this.href with location.href\r
+      // for link to another slide in this doc\r
+\r
+      if (self.page_address(this.href) == self.page_address(location.href))\r
+      {\r
+        // yes, so find new slide number\r
+        var newslidenum = self.find_slide_number(this.href);\r
+\r
+        if (newslidenum != self.slide_number)\r
+        {\r
+          var slide = self.slides[self.slide_number];\r
+          self.hide_slide(slide);\r
+          self.slide_number = newslidenum;\r
+          slide = self.slides[self.slide_number];\r
+          self.show_slide(slide);\r
+          self.set_location();\r
+        }\r
+      }\r
+      else if (this.target == null)\r
+        location.href = this.href;\r
+\r
+      this.blur();\r
+      self.disable_slide_click = true;\r
+    };\r
+\r
+    var anchors = document.body.getElementsByTagName("a");\r
+\r
+    for (var i = 0; i < anchors.length; ++i)\r
+    {\r
+      if (window.addEventListener)\r
+        anchors[i].addEventListener("click", handler, false);\r
+      else\r
+        anchors[i].attachEvent("onclick", handler);\r
+    }\r
+  },\r
+\r
+  // ### CHECK ME ### see which functions are invoked via setTimeout\r
+  // either directly or indirectly for use of w3c_slidy vs this\r
+  show_slide_number: function () {\r
+    var timer = w3c_slidy.get_timer();\r
+    w3c_slidy.slide_number_element.innerHTML = timer + "slide".localize() + " " +\r
+           (w3c_slidy.slide_number + 1) + "/" + w3c_slidy.slides.length;\r
+  },\r
+\r
+  // every 200mS check if the location has been changed as a\r
+  // result of the user activating the Back button/menu item\r
+  // doesn't work for Opera < 9.5\r
+  check_location: function () {\r
+    var hash = location.hash;\r
+\r
+    if (w3c_slidy.slide_number > 0 && (hash == "" || hash == "#"))\r
+      w3c_slidy.goto_slide(0);\r
+    else if (hash.length > 2 && hash != "#("+(w3c_slidy.slide_number+1)+")")\r
+    {\r
+      var num = parseInt(location.hash.substr(2));\r
+\r
+      if (!isNaN(num))\r
+        w3c_slidy.goto_slide(num-1);\r
+    }\r
+\r
+    if (w3c_slidy.time_left && w3c_slidy.slide_number > 0)\r
+    {\r
+      w3c_slidy.show_slide_number();\r
+\r
+      if (w3c_slidy.time_left > 0)\r
+        w3c_slidy.time_left -= 200;\r
+    }\r
+  },\r
+\r
+  get_timer: function () {\r
+    var timer = "";\r
+    if (w3c_slidy.time_left)\r
+    {\r
+      var mins, secs;\r
+      secs = Math.floor(w3c_slidy.time_left/1000);\r
+      mins = Math.floor(secs / 60);\r
+      secs = secs % 60;\r
+      timer = (mins ? mins+"m" : "") + secs + "s ";\r
+    }\r
+\r
+    return timer;\r
+  },\r
+\r
+  // this doesn't push location onto history stack for IE\r
+  // for which a hidden iframe hack is needed: load page into\r
+  // the iframe with script that set's parent's location.hash\r
+  // but that won't work for standalone use unless we can\r
+  // create the page dynamically via a javascript: URL\r
+  set_location: function () {\r
+     var uri = w3c_slidy.page_address(location.href);\r
+     var hash = "#(" + (w3c_slidy.slide_number+1) + ")";\r
+\r
+     if (w3c_slidy.slide_number >= 0)\r
+       uri = uri + hash;\r
+\r
+     if (w3c_slidy.ie && !w3c_slidy.ie8)\r
+       w3c_slidy.push_hash(hash);\r
+\r
+     if (uri != location.href) // && !khtml\r
+        location.href = uri;\r
+\r
+     if (this.khtml)\r
+        hash = "(" + (w3c_slidy.slide_number+1) + ")";\r
+\r
+     if (!this.ie && location.hash != hash && location.hash != "")\r
+       location.hash = hash;\r
+\r
+     document.title = w3c_slidy.title + " (" + (w3c_slidy.slide_number+1) + ")";\r
+     w3c_slidy.show_slide_number();\r
+  },\r
+\r
+  page_address: function (uri) {\r
+    var i = uri.indexOf("#");\r
+\r
+    if (i < 0)\r
+      i = uri.indexOf("%23");\r
+\r
+    // check if anchor is entire page\r
+\r
+    if (i < 0)\r
+      return uri;  // yes\r
+\r
+    return uri.substr(0, i);\r
+  },\r
+\r
+  // only used for IE6 and IE7\r
+  on_frame_loaded: function (hash) {\r
+    location.hash = hash;\r
+    var uri = w3c_slidy.page_address(location.href);\r
+    location.href = uri + hash;\r
+  },\r
+\r
+  // history hack with thanks to Bertrand Le Roy\r
+  push_hash: function (hash) {\r
+    if (hash == "") hash = "#(1)";\r
+      window.location.hash = hash;\r
+\r
+    var doc = document.getElementById("historyFrame").contentWindow.document;\r
+    doc.open("javascript:'<html></html>'");\r
+    // PWL modified this string literal to break the close script tag\r
+    // which otherwise gets parsed when incorporated\r
+    doc.write("<html><head><script type=\"text/javascript\">window.parent.w3c_slidy.on_frame_loaded('"+\r
+      (hash) + "');</" + "script></head><body>hello mum</body></html>");\r
+    doc.close();\r
+    },\r
+\r
+  // find current slide based upon location\r
+  // first find target anchor and then look\r
+  // for associated div element enclosing it\r
+  // finally map that to slide number\r
+  find_slide_number: function (uri) {\r
+    // first get anchor from page location\r
+\r
+    var i = uri.indexOf("#");\r
+\r
+    // check if anchor is entire page\r
+    if (i < 0)\r
+      return 0;  // yes\r
+\r
+    var anchor = unescape(uri.substr(i+1));\r
+\r
+    // now use anchor as XML ID to find target\r
+    var target = document.getElementById(anchor);\r
+\r
+    if (!target)\r
+    {\r
+      // does anchor look like "(2)" for slide 2 ??\r
+      // where first slide is (1)\r
+      var re = /\((\d)+\)/;\r
+\r
+      if (anchor.match(re))\r
+      {\r
+        var num = parseInt(anchor.substring(1, anchor.length-1));\r
+\r
+        if (num > this.slides.length)\r
+          num = 1;\r
+\r
+        if (--num < 0)\r
+          num = 0;\r
+\r
+        return num;\r
+      }\r
+\r
+      // accept [2] for backwards compatibility\r
+      re = /\[(\d)+\]/;\r
+\r
+      if (anchor.match(re))\r
+      {\r
+         var num = parseInt(anchor.substring(1, anchor.length-1));\r
+\r
+         if (num > this.slides.length)\r
+            num = 1;\r
+\r
+         if (--num < 0)\r
+            num = 0;\r
+\r
+         return num;\r
+      }\r
+\r
+      // oh dear unknown anchor\r
+      return 0;\r
+    }\r
+\r
+    // search for enclosing slide\r
+\r
+    while (true)\r
+    {\r
+      // browser coerces html elements to uppercase!\r
+      if (target.nodeName.toLowerCase() == "div" &&\r
+            this.has_class(target, "slide"))\r
+      {\r
+        // found the slide element\r
+        break;\r
+      }\r
+\r
+      // otherwise try parent element if any\r
+\r
+      target = target.parentNode;\r
+\r
+      if (!target)\r
+      {\r
+        return 0;   // no luck!\r
+      }\r
+    };\r
+\r
+    for (i = 0; i < slides.length; ++i)\r
+    {\r
+      if (slides[i] == target)\r
+        return i;  // success\r
+    }\r
+\r
+    // oh dear still no luck\r
+    return 0;\r
+  },\r
+\r
+  previous_slide: function (incremental) {\r
+    if (!w3c_slidy.view_all)\r
+    {\r
+      var slide;\r
+\r
+      if ((incremental || w3c_slidy.slide_number == 0) && w3c_slidy.last_shown != null)\r
+      {\r
+        w3c_slidy.last_shown = w3c_slidy.hide_previous_item(w3c_slidy.last_shown);\r
+        w3c_slidy.set_eos_status(false);\r
+      }\r
+      else if (w3c_slidy.slide_number > 0)\r
+      {\r
+        slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+        w3c_slidy.hide_slide(slide);\r
+\r
+        w3c_slidy.slide_number = w3c_slidy.slide_number - 1;\r
+        slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+        w3c_slidy.set_visibility_all_incremental("visible");\r
+        w3c_slidy.last_shown = w3c_slidy.previous_incremental_item(null);\r
+        w3c_slidy.set_eos_status(true);\r
+        w3c_slidy.show_slide(slide);\r
+      }\r
+\r
+      w3c_slidy.set_location();\r
+\r
+      if (!w3c_slidy.ns_pos)\r
+        w3c_slidy.refresh_toolbar(200);\r
+    }\r
+  },\r
+\r
+  next_slide: function (incremental) {\r
+    if (!w3c_slidy.view_all)\r
+    {\r
+      var slide, last = w3c_slidy.last_shown;\r
+\r
+      if (incremental || w3c_slidy.slide_number == w3c_slidy.slides.length - 1)\r
+         w3c_slidy.last_shown = w3c_slidy.reveal_next_item(w3c_slidy.last_shown);\r
+\r
+      if ((!incremental || w3c_slidy.last_shown == null) &&\r
+             w3c_slidy.slide_number < w3c_slidy.slides.length - 1)\r
+      {\r
+         slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+         w3c_slidy.hide_slide(slide);\r
+\r
+         w3c_slidy.slide_number = w3c_slidy.slide_number + 1;\r
+         slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+         w3c_slidy.last_shown = null;\r
+         w3c_slidy.set_visibility_all_incremental("hidden");\r
+         w3c_slidy.show_slide(slide);\r
+      }\r
+      else if (!w3c_slidy.last_shown)\r
+      {\r
+         if (last && incremental)\r
+           w3c_slidy.last_shown = last;\r
+      }\r
+\r
+      w3c_slidy.set_location();\r
+\r
+      w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown));\r
+\r
+      if (!w3c_slidy.ns_pos)\r
+         w3c_slidy.refresh_toolbar(200);\r
+     }\r
+  },\r
+\r
+  // to first slide with nothing revealed\r
+  // i.e. state at start of presentation\r
+  first_slide: function () {\r
+     if (!w3c_slidy.view_all)\r
+     {\r
+       var slide;\r
+\r
+       if (w3c_slidy.slide_number != 0)\r
+       {\r
+         slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+         w3c_slidy.hide_slide(slide);\r
+\r
+         w3c_slidy.slide_number = 0;\r
+         slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+         w3c_slidy.last_shown = null;\r
+         w3c_slidy.set_visibility_all_incremental("hidden");\r
+         w3c_slidy.show_slide(slide);\r
+       }\r
+\r
+       w3c_slidy.set_eos_status(\r
+         !w3c_slidy.next_incremental_item(w3c_slidy.last_shown));\r
+       w3c_slidy.set_location();\r
+     }\r
+  },\r
+\r
+  // goto last slide with everything revealed\r
+  // i.e. state at end of presentation\r
+  last_slide: function () {\r
+    if (!w3c_slidy.view_all)\r
+    {\r
+      var slide;\r
+\r
+      w3c_slidy.last_shown = null; //revealNextItem(lastShown);\r
+\r
+      if (w3c_slidy.last_shown == null &&\r
+          w3c_slidy.slide_number < w3c_slidy.slides.length - 1)\r
+      {\r
+         slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+         w3c_slidy.hide_slide(slide);\r
+         w3c_slidy.slide_number = w3c_slidy.slides.length - 1;\r
+         slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+         w3c_slidy.set_visibility_all_incremental("visible");\r
+         w3c_slidy.last_shown = w3c_slidy.previous_incremental_item(null);\r
+\r
+         w3c_slidy.show_slide(slide);\r
+      }\r
+      else\r
+      {\r
+         w3c_slidy.set_visibility_all_incremental("visible");\r
+         w3c_slidy.last_shown = w3c_slidy.previous_incremental_item(null);\r
+      }\r
+\r
+      w3c_slidy.set_eos_status(true);\r
+      w3c_slidy.set_location();\r
+    }\r
+  },\r
+\r
+\r
+  // ### check this and consider add/remove class\r
+  set_eos_status: function (state) {\r
+    if (this.eos)\r
+      this.eos.style.color = (state ? "rgb(240,240,240)" : "red");\r
+  },\r
+\r
+  // first slide is 0\r
+  goto_slide: function (num) {\r
+    //alert("going to slide " + (num+1));\r
+    var slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+    w3c_slidy.hide_slide(slide);\r
+    w3c_slidy.slide_number = num;\r
+    slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+    w3c_slidy.last_shown = null;\r
+    w3c_slidy.set_visibility_all_incremental("hidden");\r
+    w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown));\r
+    document.title = w3c_slidy.title + " (" + (w3c_slidy.slide_number+1) + ")";\r
+    w3c_slidy.show_slide(slide);\r
+    w3c_slidy.show_slide_number();\r
+  },\r
+\r
+\r
+  show_slide: function (slide) {\r
+    this.sync_background(slide);\r
+    window.scrollTo(0,0);\r
+    this.remove_class(slide, "hidden");\r
+  },\r
+\r
+  hide_slide: function (slide) {\r
+    this.add_class(slide, "hidden");\r
+  },\r
+\r
+  // show just the backgrounds pertinent to this slide\r
+  // when slide background-color is transparent\r
+  // this should now work with rgba color values\r
+  sync_background: function (slide) {\r
+    var background;\r
+    var bgColor;\r
+\r
+    if (slide.currentStyle)\r
+      bgColor = slide.currentStyle["backgroundColor"];\r
+    else if (document.defaultView)\r
+    {\r
+      var styles = document.defaultView.getComputedStyle(slide,null);\r
+\r
+      if (styles)\r
+        bgColor = styles.getPropertyValue("background-color");\r
+      else // broken implementation probably due Safari or Konqueror\r
+      {\r
+        //alert("defective implementation of getComputedStyle()");\r
+        bgColor = "transparent";\r
+      }\r
+    }\r
+    else\r
+      bgColor == "transparent";\r
+\r
+    if (bgColor == "transparent" ||\r
+        bgColor.indexOf("rgba") >= 0 ||\r
+        bgColor.indexOf("opacity") >= 0)\r
+    {\r
+      var slideClass = this.get_class_list(slide);\r
+\r
+      for (var i = 0; i < this.backgrounds.length; i++)\r
+      {\r
+        background = this.backgrounds[i];\r
+\r
+        var bgClass = this.get_class_list(background);\r
+\r
+        if (this.matching_background(slideClass, bgClass))\r
+          this.remove_class(background, "hidden");\r
+        else\r
+          this.add_class(background, "hidden");\r
+      }\r
+    }\r
+    else // forcibly hide all backgrounds\r
+      this.hide_backgrounds();\r
+  },\r
+\r
+  hide_backgrounds: function () {\r
+    for (var i = 0; i < this.backgrounds.length; i++)\r
+    {\r
+      background = this.backgrounds[i];\r
+      this.add_class(background, "hidden");\r
+    }\r
+  },\r
+\r
+  // compare classes for slide and background\r
+  matching_background: function (slideClass, bgClass) {\r
+    var i, count, pattern, result;\r
+\r
+    // define pattern as regular expression\r
+    pattern = /\w+/g;\r
+\r
+    // check background class names\r
+    result = bgClass.match(pattern);\r
+\r
+    for (i = count = 0; i < result.length; i++)\r
+    {\r
+      if (result[i] == "hidden")\r
+        continue;\r
+\r
+      if (result[i] == "background")\r
+       continue;\r
+\r
+      ++count;\r
+    }\r
+\r
+    if (count == 0)  // default match\r
+      return true;\r
+\r
+    // check for matches and place result in array\r
+    result = slideClass.match(pattern);\r
+\r
+    // now check if desired name is present for background\r
+    for (i = count = 0; i < result.length; i++)\r
+    {\r
+      if (result[i] == "hidden")\r
+        continue;\r
+\r
+      if (this.has_token(bgClass, result[i]))\r
+        return true;\r
+    }\r
+\r
+    return false;\r
+  },\r
+\r
+  resized: function () {\r
+     var width = 0;\r
+\r
+     if ( typeof( window.innerWidth ) == 'number' )\r
+       width = window.innerWidth;  // Non IE browser\r
+     else if (document.documentElement && document.documentElement.clientWidth)\r
+       width = document.documentElement.clientWidth;  // IE6\r
+     else if (document.body && document.body.clientWidth)\r
+       width = document.body.clientWidth; // IE4\r
+\r
+     var height = 0;\r
+\r
+     if ( typeof( window.innerHeight ) == 'number' )\r
+       height = window.innerHeight;  // Non IE browser\r
+     else if (document.documentElement && document.documentElement.clientHeight)\r
+       height = document.documentElement.clientHeight;  // IE6\r
+     else if (document.body && document.body.clientHeight)\r
+       height = document.body.clientHeight; // IE4\r
+\r
+     if (height && (width/height > 1.05*1024/768))\r
+     {\r
+       width = height * 1024.0/768;\r
+     }\r
+\r
+     // IE fires onresize even when only font size is changed!\r
+     // so we do a check to avoid blocking < and > actions\r
+     if (width != w3c_slidy.last_width || height != w3c_slidy.last_height)\r
+     {\r
+       if (width >= 1100)\r
+         w3c_slidy.size_index = 5;    // 4\r
+       else if (width >= 1000)\r
+         w3c_slidy.size_index = 4;    // 3\r
+       else if (width >= 800)\r
+         w3c_slidy.size_index = 3;    // 2\r
+       else if (width >= 600)\r
+         w3c_slidy.size_index = 2;    // 1\r
+       else if (width)\r
+         w3c_slidy.size_index = 0;\r
+\r
+       // add in font size adjustment from meta element e.g.\r
+       // <meta name="font-size-adjustment" content="-2" />\r
+       // useful when slides have too much content ;-)\r
+\r
+       if (0 <= w3c_slidy.size_index + w3c_slidy.size_adjustment &&\r
+             w3c_slidy.size_index + w3c_slidy.size_adjustment < w3c_slidy.sizes.length)\r
+         w3c_slidy.size_index = w3c_slidy.size_index + w3c_slidy.size_adjustment;\r
+\r
+       // enables cross browser use of relative width/height\r
+       // on object elements for use with SVG and Flash media\r
+       w3c_slidy.adjust_object_dimensions(width, height);\r
+\r
+       if (document.body.style.fontSize != w3c_slidy.sizes[w3c_slidy.size_index])\r
+       {\r
+         document.body.style.fontSize = w3c_slidy.sizes[w3c_slidy.size_index];\r
+       }\r
+\r
+       w3c_slidy.last_width = width;\r
+       w3c_slidy.last_height = height;\r
+\r
+       // force reflow to work around Mozilla bug\r
+       if (w3c_slidy.ns_pos)\r
+       {\r
+         var slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+         w3c_slidy.hide_slide(slide);\r
+         w3c_slidy.show_slide(slide);\r
+       }\r
+\r
+       // force correct positioning of toolbar\r
+       w3c_slidy.refresh_toolbar(200);\r
+     }\r
+  },\r
+\r
+  scrolled: function () {\r
+    if (w3c_slidy.toolbar && !w3c_slidy.ns_pos && !w3c_slidy.ie7)\r
+    {\r
+      w3c_slidy.hack_offset = w3c_slidy.scroll_x_offset();\r
+      // hide toolbar\r
+      w3c_slidy.toolbar.style.display = "none";\r
+\r
+      // make it reappear later\r
+      if (w3c_slidy.scrollhack == 0 && !w3c_slidy.view_all)\r
+      {\r
+        setTimeout(function () {w3c_slidy.show_toolbar(); }, 1000);\r
+        w3c_slidy.scrollhack = 1;\r
+      }\r
+    }\r
+  },\r
+\r
+  hide_toolbar: function () {\r
+    w3c_slidy.add_class(w3c_slidy.toolbar, "hidden");\r
+    window.focus();\r
+  },\r
+\r
+  // used to ensure IE refreshes toolbar in correct position\r
+  refresh_toolbar: function (interval) {\r
+    if (!w3c_slidy.ns_pos && !w3c_slidy.ie7)\r
+    {\r
+      w3c_slidy.hide_toolbar();\r
+      setTimeout(function () {w3c_slidy.show_toolbar(); }, interval);\r
+    }\r
+  },\r
+\r
+  // restores toolbar after short delay\r
+  show_toolbar: function () {\r
+    if (w3c_slidy.want_toolbar)\r
+    {\r
+      w3c_slidy.toolbar.style.display = "block";\r
+\r
+      if (!w3c_slidy.ns_pos)\r
+      {\r
+        // adjust position to allow for scrolling\r
+        var xoffset = w3c_slidy.scroll_x_offset();\r
+        w3c_slidy.toolbar.style.left = xoffset;\r
+        w3c_slidy.toolbar.style.right = xoffset;\r
+\r
+        // determine vertical scroll offset\r
+        //var yoffset = scrollYOffset();\r
+\r
+        // bottom is doc height - window height - scroll offset\r
+        //var bottom = documentHeight() - lastHeight - yoffset\r
+\r
+        //if (yoffset > 0 || documentHeight() > lastHeight)\r
+        //   bottom += 16;  // allow for height of scrollbar\r
+\r
+        w3c_slidy.toolbar.style.bottom = 0; //bottom;\r
+      }\r
+\r
+      w3c_slidy.remove_class(w3c_slidy.toolbar, "hidden");\r
+    }\r
+\r
+    w3c_slidy.scrollhack = 0;\r
+\r
+\r
+    // set the keyboard focus to the help link on the\r
+    // toolbar to ensure that document has the focus\r
+    // IE doesn't always work with window.focus()\r
+    // and this hack has benefit of Enter for help\r
+\r
+    try\r
+    {\r
+      if (!w3c_slidy.opera)\r
+        w3c_slidy.help_anchor.focus();\r
+    }\r
+    catch (e)\r
+    {\r
+    }\r
+  },\r
+\r
+// invoked via F key\r
+  toggle_toolbar: function () {\r
+    if (!w3c_slidy.view_all)\r
+    {\r
+      if (w3c_slidy.has_class(w3c_slidy.toolbar, "hidden"))\r
+      {\r
+        w3c_slidy.remove_class(w3c_slidy.toolbar, "hidden")\r
+        w3c_slidy.want_toolbar = 1;\r
+      }\r
+      else\r
+      {\r
+        w3c_slidy.add_class(w3c_slidy.toolbar, "hidden")\r
+        w3c_slidy.want_toolbar = 0;\r
+      }\r
+    }\r
+  },\r
+\r
+  scroll_x_offset: function () {\r
+    if (window.pageXOffset)\r
+      return self.pageXOffset;\r
+\r
+    if (document.documentElement &&\r
+             document.documentElement.scrollLeft)\r
+      return document.documentElement.scrollLeft;\r
+\r
+    if (document.body)\r
+      return document.body.scrollLeft;\r
+\r
+    return 0;\r
+  },\r
+\r
+  scroll_y_offset: function () {\r
+    if (window.pageYOffset)\r
+      return self.pageYOffset;\r
+\r
+    if (document.documentElement &&\r
+             document.documentElement.scrollTop)\r
+      return document.documentElement.scrollTop;\r
+\r
+    if (document.body)\r
+      return document.body.scrollTop;\r
+\r
+    return 0;\r
+  },\r
+\r
+  // looking for a way to determine height of slide content\r
+  // the slide itself is set to the height of the window\r
+  optimize_font_size: function () {\r
+    var slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+\r
+    //var dh = documentHeight(); //getDocHeight(document);\r
+    var dh = slide.scrollHeight;\r
+    var wh = getWindowHeight();\r
+    var u = 100 * dh / wh;\r
+\r
+    alert("window utilization = " + u + "% (doc "\r
+      + dh + " win " + wh + ")");\r
+  },\r
+\r
+  // from document object\r
+  get_doc_height: function (doc) {\r
+    if (!doc)\r
+      doc = document;\r
+\r
+    if (doc && doc.body && doc.body.offsetHeight)\r
+      return doc.body.offsetHeight;  // ns/gecko syntax\r
+\r
+    if (doc && doc.body && doc.body.scrollHeight)\r
+      return doc.body.scrollHeight;\r
+\r
+    alert("couldn't determine document height");\r
+  },\r
+\r
+  get_window_height: function () {\r
+    if ( typeof( window.innerHeight ) == 'number' )\r
+      return window.innerHeight;  // Non IE browser\r
+\r
+    if (document.documentElement && document.documentElement.clientHeight)\r
+      return document.documentElement.clientHeight;  // IE6\r
+\r
+    if (document.body && document.body.clientHeight)\r
+      return document.body.clientHeight; // IE4\r
+  },\r
+\r
+  document_height: function () {\r
+    var sh, oh;\r
+\r
+    sh = document.body.scrollHeight;\r
+    oh = document.body.offsetHeight;\r
+\r
+    if (sh && oh)\r
+    {\r
+      return (sh > oh ? sh : oh);\r
+    }\r
+\r
+    // no idea!\r
+    return 0;\r
+  },\r
+\r
+  smaller: function () {\r
+    if (w3c_slidy.size_index > 0)\r
+    {\r
+      --w3c_slidy.size_index;\r
+    }\r
+\r
+    w3c_slidy.toolbar.style.display = "none";\r
+    document.body.style.fontSize = w3c_slidy.sizes[w3c_slidy.size_index];\r
+    var slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+    w3c_slidy.hide_slide(slide);\r
+    w3c_slidy.show_slide(slide);\r
+    setTimeout(function () {w3c_slidy.show_toolbar(); }, 50);\r
+  },\r
+\r
+  bigger: function () {\r
+    if (w3c_slidy.size_index < w3c_slidy.sizes.length - 1)\r
+    {\r
+      ++w3c_slidy.size_index;\r
+    }\r
+\r
+    w3c_slidy.toolbar.style.display = "none";\r
+    document.body.style.fontSize = w3c_slidy.sizes[w3c_slidy.size_index];\r
+    var slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+    w3c_slidy.hide_slide(slide);\r
+    w3c_slidy.show_slide(slide);\r
+    setTimeout(function () {w3c_slidy.show_toolbar(); }, 50);\r
+  },\r
+\r
+  // enables cross browser use of relative width/height\r
+  // on object elements for use with SVG and Flash media\r
+  // with thanks to Ivan Herman for the suggestion\r
+  adjust_object_dimensions: function (width, height) {\r
+    for( var i = 0; i < w3c_slidy.objects.length; i++ )\r
+    {\r
+      var obj = this.objects[i];\r
+      var mimeType = obj.getAttribute("type");\r
+\r
+      if (mimeType == "image/svg+xml" || mimeType == "application/x-shockwave-flash")\r
+      {\r
+        if ( !obj.initialWidth )\r
+          obj.initialWidth = obj.getAttribute("width");\r
+\r
+        if ( !obj.initialHeight )\r
+          obj.initialHeight = obj.getAttribute("height");\r
+\r
+        if ( obj.initialWidth && obj.initialWidth.charAt(obj.initialWidth.length-1) == "%" )\r
+        {\r
+          var w = parseInt(obj.initialWidth.slice(0, obj.initialWidth.length-1));\r
+          var newW = width * (w/100.0);\r
+          obj.setAttribute("width",newW);\r
+        }\r
+\r
+        if ( obj.initialHeight &&\r
+             obj.initialHeight.charAt(obj.initialHeight.length-1) == "%" )\r
+        {\r
+          var h = parseInt(obj.initialHeight.slice(0, obj.initialHeight.length-1));\r
+          var newH = height * (h/100.0);\r
+          obj.setAttribute("height", newH);\r
+        }\r
+      }\r
+    }\r
+  },\r
+\r
+  // needed for Opera to inhibit default behavior\r
+  // since Opera delivers keyPress even if keyDown\r
+  // was cancelled\r
+  key_press: function (event) {\r
+    if (!event)\r
+      event = window.event;\r
+\r
+    if (!w3c_slidy.key_wanted)\r
+      return w3c_slidy.cancel(event);\r
+\r
+    return true;\r
+  },\r
+\r
+  //  See e.g. http://www.quirksmode.org/js/events/keys.html for keycodes\r
+  key_down: function (event) {\r
+    var key;\r
+\r
+    w3c_slidy.key_wanted = true;\r
+\r
+    if (!event)\r
+      event = window.event;\r
+\r
+    // kludge around NS/IE differences\r
+    if (window.event)\r
+      key = window.event.keyCode;\r
+    else if (event.which)\r
+      key = event.which;\r
+    else\r
+      return true; // Yikes! unknown browser\r
+\r
+    // ignore event if key value is zero\r
+    // as for alt on Opera and Konqueror\r
+    if (!key)\r
+       return true;\r
+\r
+    // check for concurrent control/command/alt key\r
+    // but are these only present on mouse events?\r
+\r
+    if (event.ctrlKey || event.altKey || event.metaKey)\r
+       return true;\r
+\r
+    // dismiss table of contents if visible\r
+    if (w3c_slidy.is_shown_toc() && key != 9 && key != 16 && key != 38 && key != 40)\r
+    {\r
+      w3c_slidy.hide_table_of_contents();\r
+\r
+      if (key == 27 || key == 84 || key == 67)\r
+        return w3c_slidy.cancel(event);\r
+    }\r
+\r
+    if (key == 34) // Page Down\r
+    {\r
+      if (w3c_slidy.view_all)\r
+        return true;\r
+\r
+      w3c_slidy.next_slide(false);\r
+      return w3c_slidy.cancel(event);\r
+    }\r
+    else if (key == 33) // Page Up\r
+    {\r
+      if (w3c_slidy.view_all)\r
+        return true;\r
+\r
+      w3c_slidy.previous_slide(false);\r
+      return w3c_slidy.cancel(event);\r
+    }\r
+    else if (key == 32) // space bar\r
+    {\r
+      w3c_slidy.next_slide(true);\r
+      return w3c_slidy.cancel(event);\r
+    }\r
+    else if (key == 37) // Left arrow\r
+    {\r
+      w3c_slidy.previous_slide(!event.shiftKey);\r
+      return w3c_slidy.cancel(event);\r
+    }\r
+    else if (key == 36) // Home\r
+    {\r
+      w3c_slidy.first_slide();\r
+      return w3c_slidy.cancel(event);\r
+    }\r
+    else if (key == 35) // End\r
+    {\r
+      w3c_slidy.last_slide();\r
+      return w3c_slidy.cancel(event);\r
+    }\r
+    else if (key == 39) // Right arrow\r
+    {\r
+      w3c_slidy.next_slide(!event.shiftKey);\r
+      return w3c_slidy.cancel(event);\r
+    }\r
+    else if (key == 13) // Enter\r
+    {\r
+      if (w3c_slidy.outline)\r
+      {\r
+        if (w3c_slidy.outline.visible)\r
+          w3c_slidy.fold(w3c_slidy.outline);\r
+        else\r
+          w3c_slidy.unfold(w3c_slidy.outline);\r
+\r
+       return w3c_slidy.cancel(event);\r
+      }\r
+    }\r
+    else if (key == 188)  // < for smaller fonts\r
+    {\r
+      w3c_slidy.smaller();\r
+      return w3c_slidy.cancel(event);\r
+    }\r
+    else if (key == 190)  // > for larger fonts\r
+    {\r
+      w3c_slidy.bigger();\r
+      return w3c_slidy.cancel(event);\r
+    }\r
+    else if (key == 189 || key == 109)  // - for smaller fonts\r
+    {\r
+      w3c_slidy.smaller();\r
+      return w3c_slidy.cancel(event);\r
+    }\r
+    else if (key == 187 || key == 191 || key == 107)  // = +  for larger fonts\r
+    {\r
+      w3c_slidy.bigger();\r
+      return w3c_slidy.cancel(event);\r
+    }\r
+    else if (key == 83)  // S for smaller fonts\r
+    {\r
+      w3c_slidy.smaller();\r
+      return w3c_slidy.cancel(event);\r
+    }\r
+    else if (key == 66)  // B for larger fonts\r
+    {\r
+      w3c_slidy.bigger();\r
+      return w3c_slidy.cancel(event);\r
+    }\r
+    else if (key == 90)  // Z for last slide\r
+    {\r
+      w3c_slidy.last_slide();\r
+      return w3c_slidy.cancel(event);\r
+    }\r
+    else if (key == 70)  // F for toggle toolbar\r
+    {\r
+      w3c_slidy.toggle_toolbar();\r
+      return w3c_slidy.cancel(event);\r
+    }\r
+    else if (key == 65)  // A for toggle view single/all slides\r
+    {\r
+      w3c_slidy.toggle_view();\r
+      return w3c_slidy.cancel(event);\r
+    }\r
+    else if (key == 75)  // toggle action of left click for next page\r
+    {\r
+      w3c_slidy.mouse_click_enabled = !w3c_slidy.mouse_click_enabled;\r
+      var alert_msg = (w3c_slidy.mouse_click_enabled ?\r
+                "enabled" : "disabled") +  " mouse click advance";\r
+\r
+      alert(alert_msg.localize());\r
+      return w3c_slidy.cancel(event);\r
+    }\r
+    else if (key == 84 || key == 67)  // T or C for table of contents\r
+    {\r
+      if (w3c_slidy.toc)\r
+        w3c_slidy.toggle_table_of_contents();\r
+\r
+      return w3c_slidy.cancel(event);\r
+    }\r
+    else if (key == 72) // H for help\r
+    {\r
+      window.location = w3c_slidy.help_page;\r
+      return w3c_slidy.cancel(event);\r
+    }\r
+    //else alert("key code is "+ key);\r
+\r
+    return true;\r
+  },\r
+\r
+  // safe for both text/html and application/xhtml+xml\r
+  create_element: function (name) {\r
+    if (this.xhtml && (typeof document.createElementNS != 'undefined'))\r
+      return document.createElementNS("http://www.w3.org/1999/xhtml", name)\r
+\r
+    return document.createElement(name);\r
+  },\r
+\r
+  get_element_style: function (elem, IEStyleProp, CSSStyleProp) {\r
+    if (elem.currentStyle)\r
+    {\r
+      return elem.currentStyle[IEStyleProp];\r
+    }\r
+    else if (window.getComputedStyle)\r
+    {\r
+      var compStyle = window.getComputedStyle(elem, "");\r
+      return compStyle.getPropertyValue(CSSStyleProp);\r
+    }\r
+    return "";\r
+  },\r
+\r
+  // the string str is a whitespace separated list of tokens\r
+  // test if str contains a particular token, e.g. "slide"\r
+  has_token: function (str, token) {\r
+    if (str)\r
+    {\r
+      // define pattern as regular expression\r
+      var pattern = /\w+/g;\r
+\r
+      // check for matches\r
+      // place result in array\r
+      var result = str.match(pattern);\r
+\r
+      // now check if desired token is present\r
+      for (var i = 0; i < result.length; i++)\r
+      {\r
+        if (result[i] == token)\r
+          return true;\r
+      }\r
+    }\r
+\r
+    return false;\r
+  },\r
+\r
+  get_class_list: function (element) {\r
+    if (typeof element.className != 'undefined')\r
+      return element.className;\r
+\r
+    return element.getAttribute("class");\r
+  },\r
+\r
+  has_class: function (element, name) {\r
+    if (element.nodeType != 1)\r
+      return false;\r
+\r
+    var regexp = new RegExp("(^| )" + name + "\W*");\r
+\r
+    if (typeof element.className != 'undefined')\r
+      return regexp.test(element.className);\r
+\r
+    return regexp.test(element.getAttribute("class"));\r
+  },\r
+\r
+  remove_class: function (element, name) {\r
+    var regexp = new RegExp("(^| )" + name + "\W*");\r
+    var clsval = "";\r
+\r
+    if (typeof element.className != 'undefined')\r
+    {\r
+      clsval = element.className;\r
+\r
+      if (clsval)\r
+      {\r
+        clsval = clsval.replace(regexp, "");\r
+        element.className = clsval;\r
+      }\r
+    }\r
+    else\r
+    {\r
+      clsval = element.getAttribute("class");\r
+\r
+      if (clsval)\r
+      {\r
+        clsval = clsval.replace(regexp, "");\r
+        element.setAttribute("class", clsval);\r
+      }\r
+    }\r
+  },\r
+\r
+  add_class: function (element, name) {\r
+    if (!this.has_class(element, name))\r
+    {\r
+      if (typeof element.className != 'undefined')\r
+        element.className += " " + name;\r
+      else\r
+      {\r
+        var clsval = element.getAttribute("class");\r
+        clsval = clsval ? clsval + " " + name : name;\r
+        element.setAttribute("class", clsval);\r
+      }\r
+    }\r
+  },\r
+\r
+  // HTML elements that can be used with class="incremental"\r
+  // note that you can also put the class on containers like\r
+  // up, ol, dl, and div to make their contents appear\r
+  // incrementally. Upper case is used since this is what\r
+  // browsers report for HTML node names (text/html).\r
+  incremental_elements: null,\r
+  okay_for_incremental: function (name) {\r
+    if (!this.incremental_elements)\r
+    {\r
+      var inclist = new Array();\r
+      inclist["p"] = true;\r
+      inclist["pre"] = true;\r
+      inclist["li"] = true;\r
+      inclist["blockquote"] = true;\r
+      inclist["dt"] = true;\r
+      inclist["dd"] = true;\r
+      inclist["h2"] = true;\r
+      inclist["h3"] = true;\r
+      inclist["h4"] = true;\r
+      inclist["h5"] = true;\r
+      inclist["h6"] = true;\r
+      inclist["span"] = true;\r
+      inclist["address"] = true;\r
+      inclist["table"] = true;\r
+      inclist["tr"] = true;\r
+      inclist["th"] = true;\r
+      inclist["td"] = true;\r
+      inclist["img"] = true;\r
+      inclist["object"] = true;\r
+      this.incremental_elements = inclist;\r
+    }\r
+    return this.incremental_elements[name.toLowerCase()];\r
+  },\r
+\r
+  next_incremental_item: function (node) {\r
+    var br = this.is_xhtml ? "br" : "BR";\r
+    var slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+\r
+    for (;;)\r
+    {\r
+      node = w3c_slidy.next_node(slide, node);\r
+\r
+      if (node == null || node.parentNode == null)\r
+        break;\r
+\r
+      if (node.nodeType == 1)  // ELEMENT\r
+      {\r
+        if (node.nodeName == br)\r
+          continue;\r
+\r
+        if (w3c_slidy.has_class(node, "incremental")\r
+             && w3c_slidy.okay_for_incremental(node.nodeName))\r
+          return node;\r
+\r
+        if (w3c_slidy.has_class(node.parentNode, "incremental")\r
+             && !w3c_slidy.has_class(node, "non-incremental"))\r
+          return node;\r
+      }\r
+    }\r
+\r
+    return node;\r
+  },\r
+\r
+  previous_incremental_item: function (node) {\r
+    var br = this.is_xhtml ? "br" : "BR";\r
+    var slide = w3c_slidy.slides[w3c_slidy.slide_number];\r
+\r
+    for (;;)\r
+    {\r
+      node = w3c_slidy.previous_node(slide, node);\r
+\r
+      if (node == null || node.parentNode == null)\r
+        break;\r
+\r
+      if (node.nodeType == 1)\r
+      {\r
+        if (node.nodeName == br)\r
+          continue;\r
+\r
+        if (w3c_slidy.has_class(node, "incremental")\r
+             && w3c_slidy.okay_for_incremental(node.nodeName))\r
+          return node;\r
+\r
+        if (w3c_slidy.has_class(node.parentNode, "incremental")\r
+             && !w3c_slidy.has_class(node, "non-incremental"))\r
+          return node;\r
+      }\r
+    }\r
+\r
+    return node;\r
+  },\r
+\r
+  // set visibility for all elements on current slide with\r
+  // a parent element with attribute class="incremental"\r
+  set_visibility_all_incremental: function (value) {\r
+    var node = this.next_incremental_item(null);\r
+\r
+    if (value == "hidden")\r
+    {\r
+      while (node)\r
+      {\r
+        w3c_slidy.add_class(node, "invisible");\r
+        node = w3c_slidy.next_incremental_item(node);\r
+      }\r
+    }\r
+    else // value == "visible"\r
+    {\r
+      while (node)\r
+      {\r
+        w3c_slidy.remove_class(node, "invisible");\r
+        node = w3c_slidy.next_incremental_item(node);\r
+      }\r
+    }\r
+  },\r
+\r
+  // reveal the next hidden item on the slide\r
+  // node is null or the node that was last revealed\r
+  reveal_next_item: function (node) {\r
+    node = w3c_slidy.next_incremental_item(node);\r
+\r
+    if (node && node.nodeType == 1)  // an element\r
+      w3c_slidy.remove_class(node, "invisible");\r
+\r
+    return node;\r
+  },\r
+\r
+  // exact inverse of revealNextItem(node)\r
+  hide_previous_item: function (node) {\r
+    if (node && node.nodeType == 1)  // an element\r
+      w3c_slidy.add_class(node, "invisible");\r
+\r
+    return this.previous_incremental_item(node);\r
+  },\r
+\r
+  // left to right traversal of root's content\r
+  next_node: function (root, node) {\r
+    if (node == null)\r
+      return root.firstChild;\r
+\r
+    if (node.firstChild)\r
+      return node.firstChild;\r
+\r
+    if (node.nextSibling)\r
+      return node.nextSibling;\r
+\r
+    for (;;)\r
+    {\r
+      node = node.parentNode;\r
+\r
+      if (!node || node == root)\r
+        break;\r
+\r
+      if (node && node.nextSibling)\r
+        return node.nextSibling;\r
+    }\r
+\r
+    return null;\r
+  },\r
+\r
+  // right to left traversal of root's content\r
+  previous_node: function (root, node) {\r
+    if (node == null)\r
+    {\r
+      node = root.lastChild;\r
+\r
+      if (node)\r
+      {\r
+        while (node.lastChild)\r
+          node = node.lastChild;\r
+      }\r
+\r
+      return node;\r
+    }\r
+\r
+    if (node.previousSibling)\r
+    {\r
+      node = node.previousSibling;\r
+\r
+      while (node.lastChild)\r
+        node = node.lastChild;\r
+\r
+      return node;\r
+    }\r
+\r
+    if (node.parentNode != root)\r
+      return node.parentNode;\r
+\r
+    return null;\r
+  },\r
+\r
+  previous_sibling_element: function (el) {\r
+    el = el.previousSibling;\r
+\r
+    while (el && el.nodeType != 1)\r
+      el = el.previousSibling;\r
+\r
+    return el;\r
+  },\r
+\r
+  next_sibling_element: function (el) {\r
+    el = el.nextSibling;\r
+\r
+    while (el && el.nodeType != 1)\r
+      el = el.nextSibling;\r
+\r
+    return el;\r
+  },\r
+\r
+  first_child_element: function (el) {\r
+    var node;\r
+\r
+    for (node = el.firstChild; node; node = node.nextSibling)\r
+    {\r
+      if (node.nodeType == 1)\r
+        break;\r
+    }\r
+\r
+    return node;\r
+  },\r
+\r
+  first_tag: function (element, tag) {\r
+    var node;\r
+\r
+    if (!this.is_xhtml)\r
+      tag = tag.toUpperCase();\r
+\r
+    for (node = element.firstChild; node; node = node.nextSibling)\r
+    {\r
+      if (node.nodeType == 1 && node.nodeName == tag)\r
+        break;\r
+    }\r
+\r
+    return node;\r
+  },\r
+\r
+  hide_selection: function () {\r
+    if (window.getSelection) // Firefox, Chromium, Safari, Opera\r
+    {\r
+      var selection = window.getSelection();\r
+\r
+      if (selection.rangeCount > 0)\r
+      {\r
+        var range = selection.getRangeAt(0);\r
+        range.collapse (false);\r
+      }\r
+    }\r
+    else // Internet Explorer\r
+    {\r
+      var textRange = document.selection.createRange ();\r
+      textRange.collapse (false);\r
+    }\r
+  },\r
+\r
+  get_selected_text: function () {\r
+    try\r
+    {\r
+      if (window.getSelection)\r
+        return window.getSelection().toString();\r
+\r
+      if (document.getSelection)\r
+        return document.getSelection().toString();\r
+\r
+      if (document.selection)\r
+        return document.selection.createRange().text;\r
+    }\r
+    catch (e)\r
+    {\r
+    }\r
+\r
+    return "";\r
+  },\r
+\r
+  // make note of length of selected text\r
+  // as this evaluates to zero in click event\r
+  mouse_button_up: function (e) {\r
+    w3c_slidy.selected_text_len = w3c_slidy.get_selected_text().length;\r
+  },\r
+\r
+  // right mouse button click is reserved for context menus\r
+  // it is more reliable to detect rightclick than leftclick\r
+  mouse_button_click: function (e) {\r
+    var rightclick = false;\r
+    var leftclick = false;\r
+    var middleclick = false;\r
+    var target;\r
+\r
+    if (!e)\r
+      var e = window.event;\r
+\r
+    if (e.target)\r
+      target = e.target;\r
+    else if (e.srcElement)\r
+      target = e.srcElement;\r
+\r
+    // work around Safari bug\r
+    if (target.nodeType == 3)\r
+      target = target.parentNode;\r
+\r
+    if (e.which) // all browsers except IE\r
+    {\r
+      leftclick = (e.which == 1);\r
+      middleclick = (e.which == 2);\r
+      rightclick = (e.which == 3);\r
+    }\r
+    else if (e.button)\r
+    {\r
+      // Konqueror gives 1 for left, 4 for middle\r
+      // IE6 gives 0 for left and not 1 as I expected\r
+\r
+      if (e.button == 4)\r
+        middleclick = true;\r
+\r
+      // all browsers agree on 2 for right button\r
+      rightclick = (e.button == 2);\r
+    }\r
+    else leftclick = true;\r
+/*\r
+    alert("you clicked over a " + target.nodeName + " element\n" +\r
+    "w3c_slidy.mouse_click_enabled = " + w3c_slidy.mouse_click_enabled + "\n" +\r
+    "leftclick = " + leftclick + "\n" +\r
+    "selected text length = " + w3c_slidy.selected_text_len);\r
+    //alert("selected text length = " + w3c_slidy.selected_text_len);\r
+*/\r
+    if (w3c_slidy.selected_text_len > 0)\r
+    {\r
+      w3c_slidy.stop_propagation(e);\r
+      e.cancel = true;\r
+      e.returnValue = false;\r
+      return false;\r
+    }\r
+\r
+    // dismiss table of contents\r
+    w3c_slidy.hide_table_of_contents();\r
+\r
+    // check if target is something that probably want's clicks\r
+    // e.g. a, embed, object, input, textarea, select, option\r
+    var tag = target.nodeName.toLowerCase();\r
+\r
+    if (w3c_slidy.mouse_click_enabled && leftclick &&\r
+        tag != "a" &&\r
+        tag != "embed" &&\r
+        tag != "object" &&\r
+        tag != "video" &&\r
+        tag != "input" &&\r
+        tag != "textarea" &&\r
+        tag != "select" &&\r
+        tag != "option" &&\r
+        !target.onclick)\r
+    {\r
+      w3c_slidy.next_slide(true);\r
+      w3c_slidy.stop_propagation(e);\r
+      e.cancel = true;\r
+      e.returnValue = false;\r
+      return false;\r
+    }\r
+  },\r
+\r
+  get_key: function (e)\r
+  {\r
+    var key;\r
+\r
+    // kludge around NS/IE differences\r
+    if (typeof window.event != "undefined")\r
+      key = window.event.keyCode;\r
+    else if (e.which)\r
+      key = e.which;\r
+\r
+    return key;\r
+  },\r
+\r
+  get_target: function (e) {\r
+    var target;\r
+\r
+    if (!e)\r
+      e = window.event;\r
+\r
+    if (e.target)\r
+      target = e.target;\r
+    else if (e.srcElement)\r
+      target = e.srcElement;\r
+\r
+    if (target.nodeType != 1)\r
+      target = target.parentNode;\r
+\r
+    return target;\r
+  },\r
+\r
+  // does display property provide correct defaults?\r
+  is_block: function (elem) {\r
+    var tag = elem.nodeName.toLowerCase();\r
+\r
+    return tag == "ol" || tag == "ul" || tag == "p" ||\r
+           tag == "li" || tag == "table" || tag == "pre" ||\r
+           tag == "h1" || tag == "h2" || tag == "h3" ||\r
+           tag == "h4" || tag == "h5" || tag == "h6" ||\r
+           tag == "blockquote" || tag == "address";\r
+  },\r
+\r
+  add_listener: function (element, event, handler) {\r
+    if (window.addEventListener)\r
+      element.addEventListener(event, handler, false);\r
+    else\r
+      element.attachEvent("on"+event, handler);\r
+  },\r
+\r
+  // used to prevent event propagation from field controls\r
+  stop_propagation: function (event) {\r
+    event = event ? event : window.event;\r
+    event.cancelBubble = true;  // for IE\r
+\r
+    if (event.stopPropagation)\r
+      event.stopPropagation();\r
+\r
+    return true;\r
+  },\r
+\r
+  cancel: function (event) {\r
+    if (event)\r
+    {\r
+       event.cancel = true;\r
+       event.returnValue = false;\r
+\r
+      if (event.preventDefault)\r
+        event.preventDefault();\r
+    }\r
+\r
+    w3c_slidy.key_wanted = false;\r
+    return false;\r
+  }\r
+};\r
+\r
+// for each language define an associative array\r
+// and also the help text which is longer\r
+\r
+var w3c_slidy_i18n = {\r
+  strings_es: {\r
+    "slide":"pág.",\r
+    "help?":"Ayuda",\r
+    "contents?":"Índice",\r
+    "table of contents":"tabla de contenidos",\r
+    "Table of Contents":"Tabla de Contenidos",\r
+    "restart presentation":"Reiniciar presentación",\r
+    "restart?":"Inicio"\r
+  },\r
+  help_es:\r
+    "Utilice el ratón, barra espaciadora, teclas Izda/Dcha, " +\r
+    "o Re pág y Av pág. Use S y B para cambiar el tamaño de fuente.",\r
+\r
+  strings_ca: {\r
+    "slide":"pàg..",\r
+    "help?":"Ajuda",\r
+    "contents?":"Índex",\r
+    "table of contents":"taula de continguts",\r
+    "Table of Contents":"Taula de Continguts",\r
+    "restart presentation":"Reiniciar presentació",\r
+    "restart?":"Inici"\r
+  },\r
+  help_ca:\r
+    "Utilitzi el ratolí, barra espaiadora, tecles Esq./Dta. " +\r
+    "o Re pàg y Av pàg. Usi S i B per canviar grandària de font.",\r
+\r
+  strings_cs: {\r
+    "slide":"snímek",\r
+    "help?":"nápověda",\r
+    "contents?":"obsah",\r
+    "table of contents":"obsah prezentace",\r
+    "Table of Contents":"Obsah prezentace",\r
+    "restart presentation":"znovu spustit prezentaci",\r
+    "restart?":"restart"\r
+  },\r
+  help_cs:\r
+    "Prezentaci můžete procházet pomocí kliknutí myši, mezerníku, " +\r
+    "šipek vlevo a vpravo nebo kláves PageUp a PageDown. Písmo se " +\r
+    "dá zvětšit a zmenšit pomocí kláves B a S.",\r
+\r
+  strings_nl: {\r
+    "slide":"pagina",\r
+    "help?":"Help?",\r
+    "contents?":"Inhoud?",\r
+    "table of contents":"inhoudsopgave",\r
+    "Table of Contents":"Inhoudsopgave",\r
+    "restart presentation":"herstart presentatie",\r
+    "restart?":"Herstart?"\r
+  },\r
+  help_nl:\r
+     "Navigeer d.m.v. het muis, spatiebar, Links/Rechts toetsen, " +\r
+     "of PgUp en PgDn. Gebruik S en B om de karaktergrootte te veranderen.",\r
+\r
+  strings_de: {\r
+    "slide":"Seite",\r
+    "help?":"Hilfe",\r
+    "contents?":"Übersicht",\r
+    "table of contents":"Inhaltsverzeichnis",\r
+    "Table of Contents":"Inhaltsverzeichnis",\r
+    "restart presentation":"Präsentation neu starten",\r
+    "restart?":"Neustart"\r
+  },\r
+  help_de:\r
+    "Benutzen Sie die Maus, Leerschlag, die Cursortasten links/rechts oder " +\r
+    "Page up/Page Down zum Wechseln der Seiten und S und B für die Schriftgrösse.",\r
+\r
+  strings_pl: {\r
+    "slide":"slajd",\r
+    "help?":"pomoc?",\r
+    "contents?":"spis treści?",\r
+    "table of contents":"spis treści",\r
+    "Table of Contents":"Spis Treści",\r
+    "restart presentation":"Restartuj prezentację",\r
+    "restart?":"restart?"\r
+  },\r
+  help_pl:\r
+    "Zmieniaj slajdy klikając myszą, naciskając spację, strzałki lewo/prawo" +\r
+    "lub PgUp / PgDn. Użyj klawiszy S i B, aby zmienić rozmiar czczionki.",\r
+\r
+  strings_fr: {\r
+    "slide":"page",\r
+    "help?":"Aide",\r
+    "contents?":"Index",\r
+    "table of contents":"table des matières",\r
+    "Table of Contents":"Table des matières",\r
+    "restart presentation":"Recommencer l'exposé",\r
+    "restart?":"Début"\r
+  },\r
+  help_fr:\r
+    "Naviguez avec la souris, la barre d'espace, les flèches " +\r
+    "gauche/droite ou les touches Pg Up, Pg Dn. Utilisez " +\r
+    "les touches S et B pour modifier la taille de la police.",\r
+\r
+  strings_hu: {\r
+    "slide":"oldal",\r
+    "help?":"segítség",\r
+    "contents?":"tartalom",\r
+    "table of contents":"tartalomjegyzék",\r
+    "Table of Contents":"Tartalomjegyzék",\r
+    "restart presentation":"bemutató újraindítása",\r
+    "restart?":"újraindítás"\r
+  },\r
+  help_hu:\r
+    "Az oldalak közti lépkedéshez kattintson az egérrel, vagy " +\r
+    "használja a szóköz, a bal, vagy a jobb nyíl, illetve a Page Down, " +\r
+    "Page Up billentyűket. Az S és a B billentyűkkel változtathatja " +\r
+    "a szöveg méretét.",\r
+\r
+  strings_it: {\r
+    "slide":"pag.",\r
+    "help?":"Aiuto",\r
+    "contents?":"Indice",\r
+    "table of contents":"indice",\r
+    "Table of Contents":"Indice",\r
+    "restart presentation":"Ricominciare la presentazione",\r
+    "restart?":"Inizio"\r
+  },\r
+  help_it:\r
+    "Navigare con mouse, barra spazio, frecce sinistra/destra o " +\r
+    "PgUp e PgDn. Usare S e B per cambiare la dimensione dei caratteri.",\r
+\r
+  strings_el: {\r
+    "slide":"σελίδα",\r
+    "help?":"βοήθεια;",\r
+    "contents?":"περιεχόμενα;",\r
+    "table of contents":"πίνακας περιεχομένων",\r
+    "Table of Contents":"Πίνακας Περιεχομένων",\r
+    "restart presentation":"επανεκκίνηση παρουσίασης",\r
+    "restart?":"επανεκκίνηση;"\r
+  },\r
+  help_el:\r
+    "Πλοηγηθείτε με το κλίκ του ποντικιού, το space, τα βέλη αριστερά/δεξιά, " +\r
+    "ή Page Up και Page Down. Χρησιμοποιήστε τα πλήκτρα S και B για να αλλάξετε " +\r
+    "το μέγεθος της γραμματοσειράς.",\r
+\r
+  strings_ja: {\r
+    "slide":"スライド",\r
+    "help?":"ヘルプ",\r
+    "contents?":"目次",\r
+    "table of contents":"目次を表示",\r
+    "Table of Contents":"目次",\r
+    "restart presentation":"最初から再生",\r
+    "restart?":"最初から"\r
+  },\r
+  help_ja:\r
+     "マウス左クリック ・ スペース ・ 左右キー " +\r
+     "または Page Up ・ Page Downで操作, S ・ Bでフォントサイズ変更",\r
+\r
+  strings_zh: {\r
+    "slide":"幻灯片",\r
+    "help?":"帮助?",\r
+    "contents?":"内容?",\r
+    "table of contents":"目录",\r
+    "Table of Contents":"目录",\r
+    "restart presentation":"重新启动展示",\r
+    "restart?":"重新启动?"\r
+  },\r
+  help_zh:\r
+    "用鼠标点击, 空格条, 左右箭头, Pg Up 和 Pg Dn 导航. " +\r
+    "用 S, B 改变字体大小.",\r
+\r
+  strings_ru: {\r
+    "slide":"слайд",\r
+    "help?":"помощь?",\r
+    "contents?":"содержание?",\r
+    "table of contents":"оглавление",\r
+    "Table of Contents":"Оглавление",\r
+    "restart presentation":"перезапустить презентацию",\r
+    "restart?":"перезапуск?"\r
+  },\r
+  help_ru:\r
+    "Перемещайтесь кликая мышкой, используя клавишу пробел, стрелки" +\r
+    "влево/вправо или Pg Up и Pg Dn. Клавиши S и B меняют размер шрифта.",\r
+\r
+  strings_sv: {\r
+    "slide":"sida",\r
+    "help?":"hjälp",\r
+    "contents?":"innehåll",\r
+    "table of contents":"innehållsförteckning",\r
+    "Table of Contents":"Innehållsförteckning",\r
+    "restart presentation":"visa presentationen från början",\r
+    "restart?":"börja om"\r
+  },\r
+  help_sv:\r
+    "Bläddra med ett klick med vänstra musknappen, mellanslagstangenten, " +\r
+    "vänster- och högerpiltangenterna eller tangenterna Pg Up, Pg Dn. " +\r
+    "Använd tangenterna S och B för att ändra textens storlek.",\r
+\r
+// each such language array is declared in the localize array\r
+// which is set on string prototype and used as in "foo".localize();\r
+  localize: {\r
+    "es":this.strings_es,\r
+    "ca":this.strings_ca,\r
+    "cs":this.strings_cs,\r
+    "nl":this.strings_nl,\r
+    "de":this.strings_de,\r
+    "pl":this.strings_pl,\r
+    "fr":this.strings_fr,\r
+    "hu":this.strings_hu,\r
+    "it":this.strings_it,\r
+    "el":this.strings_el,\r
+    "jp":this.strings_ja,\r
+    "zh":this.strings_zh,\r
+    "ru":this.strings_ru,\r
+    "sv":this.strings_sv\r
+  },\r
+\r
+  init: function () {\r
+    var i18n = w3c_slidy_i18n;\r
+    var help_text = w3c_slidy.help_text;\r
+    i18n.strings_es[help_text] = i18n.help_es;\r
+    i18n.strings_ca[help_text] = i18n.help_ca;\r
+    i18n.strings_cs[help_text] = i18n.help_cs;\r
+    i18n.strings_nl[help_text] = i18n.help_nl;\r
+    i18n.strings_de[help_text] = i18n.help_de;\r
+    i18n.strings_pl[help_text] = i18n.help_pl;\r
+    i18n.strings_fr[help_text] = i18n.help_fr;\r
+    i18n.strings_hu[help_text] = i18n.help_hu;\r
+    i18n.strings_it[help_text] = i18n.help_it;\r
+    i18n.strings_el[help_text] = i18n.help_el;\r
+    i18n.strings_ja[help_text] = i18n.help_ja;\r
+    i18n.strings_zh[help_text] = i18n.help_zh;\r
+    i18n.strings_ru[help_text] = i18n.help_ru;\r
+    i18n.strings_sv[help_text] = i18n.help_sv;\r
+\r
+    w3c_slidy.lang = document.body.parentNode.getAttribute("lang");\r
+\r
+    if (!w3c_slidy.lang)\r
+      w3c_slidy.lang = document.body.parentNode.getAttribute("xml:lang");\r
+\r
+    if (!w3c_slidy.lang)\r
+      w3c_slidy.lang = "en";\r
+\r
+    // add localize method to all strings\r
+    // for use as in "contents".localize()\r
+   String.prototype.localize = function() {\r
+     if (this == "")\r
+       return this;\r
+\r
+     // try full language code, e.g. en-US\r
+     var s, lookup = w3c_slidy_i18n.localize[w3c_slidy.lang];\r
+\r
+     if (lookup)\r
+     {\r
+       s = lookup[this];\r
+\r
+       if (s)\r
+        return s;\r
+     }\r
+\r
+     // strip country code suffix, e.g.\r
+     // try en if undefined for en-US\r
+     var lg = w3c_slidy.lang.split("-");\r
+\r
+     if (lg.length > 1)\r
+     {\r
+       lookup = w3c_slidy_i18n.localize[lg[0]];\r
+\r
+       if (lookup)\r
+       {\r
+         s = lookup[this];\r
+\r
+         if (s)\r
+          return s;\r
+       }\r
+     }\r
+\r
+     // otherwise string as is\r
+     return this;\r
+   };\r
+  }\r
+};\r
+\r
+// hack for back button behavior\r
+if (w3c_slidy.ie6 || w3c_slidy.ie7)\r
+{\r
+  document.write("<iframe id='historyFrame' " +\r
+  "src='javascript:\"<html"+"></"+"html>\"' " +\r
+  "height='1' width='1' " +\r
+  "style='position:absolute;left:-800px'></iframe>");\r
+}\r
+\r
+// attach event listeners for initialization\r
+w3c_slidy.set_up();\r
+\r
+// hide the slides as soon as body element is available\r
+// to reduce annoying screen mess before the onload event\r
+setTimeout(w3c_slidy.hide_slides, 50);\r
+\r
+/*]]>*/\r
+</script>\r
+</head>\r
+<body class="article" style="max-width:45em">\r
+<div id="header" class="slide">\r
+<h1>State of Evergreen Development</h1>\r
+</div>\r
+<div class="sect1 slide">\r
+<h1 id="_2_8_and_more">2.8 and More</h1>\r
+<div class="sectionbody" style="max-width:45em">\r
+<ul class="">\r
+<li>\r
+<span>\r
+2.8\r
+</span>\r
+<ul class="">\r
+<li>\r
+<span>\r
+~500 commits\r
+</span>\r
+</li>\r
+<li>\r
+<span>\r
+32 code &amp; doc authors\r
+</span>\r
+</li>\r
+<li>\r
+<span>\r
+12 committers\r
+</span>\r
+</li>\r
+</ul>\r
+</li>\r
+<li>\r
+<span>\r
+2.6 is now security updates only\r
+</span>\r
+</li>\r
+<li>\r
+<span>\r
+See Also\r
+</span>\r
+<ul class="">\r
+<li>\r
+<span>\r
+9am Sat. Developer Update\r
+</span>\r
+</li>\r
+<li>\r
+<span>\r
+9:30am Sat. Browser Client Update\r
+</span>\r
+</li>\r
+</ul>\r
+</li>\r
+</ul>\r
+</div>\r
+</div>\r
+<div class="sect1 slide">\r
+<h1 id="_new_code_amp_docs_commit_authors_since_eg_2014">New Code &amp; Docs Commit Authors Since EG 2014</h1>\r
+<div class="sectionbody" style="max-width:45em">\r
+<div class="tableblock">\r
+<table rules="all"\r
+width="100%"\r
+frame="border"\r
+cellspacing="0" cellpadding="4">\r
+<caption class="title">Table 1. Authors</caption>\r
+<col width="33%" />\r
+<col width="33%" />\r
+<col width="33%" />\r
+<tbody>\r
+<tr>\r
+<td align="left" valign="top"><p class="table">Aleksey Lazar</p></td>\r
+<td align="left" valign="top"><p class="table">Benjamin Wiens</p></td>\r
+<td align="left" valign="top"><p class="table">Blake Henderson</p></td>\r
+</tr>\r
+<tr>\r
+<td align="left" valign="top"><p class="table">Christine Morgan</p></td>\r
+<td align="left" valign="top"><p class="table">Dananji Liyanage</p></td>\r
+<td align="left" valign="top"><p class="table">Debbie Luchenbill</p></td>\r
+</tr>\r
+<tr>\r
+<td align="left" valign="top"><p class="table">Erica Rohlfs</p></td>\r
+<td align="left" valign="top"><p class="table">Fredric T Parks</p></td>\r
+<td align="left" valign="top"><p class="table">Hekman Library Technology Team</p></td>\r
+</tr>\r
+<tr>\r
+<td align="left" valign="top"><p class="table">Hubert Depesz Lubaczewski</p></td>\r
+<td align="left" valign="top"><p class="table">Jennifer Pringle</p></td>\r
+<td align="left" valign="top"><p class="table">Josh Stompro</p></td>\r
+</tr>\r
+<tr>\r
+<td align="left" valign="top"><p class="table">Kate Butler</p></td>\r
+<td align="left" valign="top"><p class="table">Lynn Floyd</p></td>\r
+<td align="left" valign="top"><p class="table">Michele Morgan</p></td>\r
+</tr>\r
+<tr>\r
+<td align="left" valign="top"><p class="table">Snigdha Dagar</p></td>\r
+<td align="left" valign="top"><p class="table">Suzanne Paterno</p></td>\r
+<td align="left" valign="top"><p class="table">Terran McCanna</p></td>\r
+</tr>\r
+<tr>\r
+<td align="left" valign="top"><p class="table">Timothy Spindler</p></td>\r
+<td align="left" valign="top"><p class="table">Victoria Lewis</p></td>\r
+<td align="left" valign="top"><p class="table"></p></td>\r
+</tr>\r
+</tbody>\r
+</table>\r
+</div>\r
+</div>\r
+</div>\r
+</body>\r
+</html>\r