aboutsummaryrefslogtreecommitdiff
path: root/mod/dokuwiki/vendors/dokuwiki/lib
diff options
context:
space:
mode:
Diffstat (limited to 'mod/dokuwiki/vendors/dokuwiki/lib')
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/_fla/MultipleUpload.as329
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/_fla/README4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/_fla/index.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/_fla/multipleUpload.flabin0 -> 1812480 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/ajax.php370
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/css.php330
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/detail.php58
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/fetch.php173
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/index.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/indexer.php375
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/js.php397
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/mediamanager.php105
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/multipleUpload.swfbin0 -> 64561 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/opensearch.php38
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/xmlrpc.php921
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/admin/README2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/admin/acl.pngbin0 -> 1336 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/admin/config.pngbin0 -> 1761 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/admin/plugin.pngbin0 -> 1415 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/admin/popularity.pngbin0 -> 1420 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/admin/revert.pngbin0 -> 1598 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/admin/usermanager.pngbin0 -> 1850 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/arrow_down.gifbin0 -> 273 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/arrow_up.gifbin0 -> 274 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/at.gifbin0 -> 57 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/blank.gifbin0 -> 42 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/close.pngbin0 -> 1345 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/del.pngbin0 -> 433 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/diff.pngbin0 -> 219 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/edit.gifbin0 -> 142 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/error.pngbin0 -> 706 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/bz2.pngbin0 -> 720 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/c.pngbin0 -> 774 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/conf.pngbin0 -> 717 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/cpp.pngbin0 -> 859 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/cs.pngbin0 -> 808 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/css.pngbin0 -> 843 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/deb.pngbin0 -> 716 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/doc.pngbin0 -> 659 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/file.pngbin0 -> 720 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/gif.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/gz.pngbin0 -> 716 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/htm.pngbin0 -> 748 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/html.pngbin0 -> 748 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/index.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/java.pngbin0 -> 739 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/jpeg.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/jpg.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/js.pngbin0 -> 809 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/lua.pngbin0 -> 465 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odc.pngbin0 -> 749 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odf.pngbin0 -> 807 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odg.pngbin0 -> 788 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odi.pngbin0 -> 788 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odp.pngbin0 -> 744 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ods.pngbin0 -> 749 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odt.pngbin0 -> 577 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/pdf.pngbin0 -> 663 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/php.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/pl.pngbin0 -> 698 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/png.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ppt.pngbin0 -> 762 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ps.pngbin0 -> 534 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/py.pngbin0 -> 714 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rar.pngbin0 -> 631 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rb.pngbin0 -> 828 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rpm.pngbin0 -> 638 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rtf.pngbin0 -> 474 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/swf.pngbin0 -> 843 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxc.pngbin0 -> 749 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxd.pngbin0 -> 788 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxi.pngbin0 -> 744 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxw.pngbin0 -> 577 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/tar.pngbin0 -> 747 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/tgz.pngbin0 -> 716 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/txt.pngbin0 -> 542 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/xls.pngbin0 -> 731 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/xml.pngbin0 -> 475 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/zip.pngbin0 -> 874 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/history.pngbin0 -> 202 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/index.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/info.pngbin0 -> 783 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki.pngbin0 -> 1089 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.de.gifbin0 -> 882 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.gifbin0 -> 882 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.uk.gifbin0 -> 882 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/coral.gifbin0 -> 85 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/doku.gifbin0 -> 257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/dokubug.gifbin0 -> 166 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/google.gifbin0 -> 980 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/meatball.gifbin0 -> 1100 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/phpfn.gifbin0 -> 330 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/sb.gifbin0 -> 886 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wiki.gifbin0 -> 909 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wp.gifbin0 -> 680 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpde.gifbin0 -> 680 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpes.gifbin0 -> 680 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpfr.gifbin0 -> 680 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpjp.gifbin0 -> 680 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpmeta.gifbin0 -> 680 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wppl.gifbin0 -> 680 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/larger.gifbin0 -> 87 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc-nd.pngbin0 -> 5281 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc-sa.pngbin0 -> 5460 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc.pngbin0 -> 5145 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nd.pngbin0 -> 4880 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-sa.pngbin0 -> 5083 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by.pngbin0 -> 4739 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc.pngbin0 -> 958 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/gnufdl.pngbin0 -> 1748 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/publicdomain.pngbin0 -> 4962 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc-nd.pngbin0 -> 678 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc-sa.pngbin0 -> 686 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc.pngbin0 -> 663 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nd.pngbin0 -> 658 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-sa.pngbin0 -> 661 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by.pngbin0 -> 629 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc.pngbin0 -> 728 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/gnufdl.pngbin0 -> 839 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/publicdomain.pngbin0 -> 621 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/list-minus.gifbin0 -> 64 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/list-plus.gifbin0 -> 67 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/loading.gifbin0 -> 1876 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/magnifier.pngbin0 -> 615 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/minus.gifbin0 -> 858 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/multiupload.pngbin0 -> 698 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/notify.pngbin0 -> 789 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/ns.pngbin0 -> 853 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/page.pngbin0 -> 635 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/pencil.pngbin0 -> 450 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/plus.gifbin0 -> 860 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smaller.gifbin0 -> 86 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/delete.gifbin0 -> 1421 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/fixme.gifbin0 -> 1435 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_arrow.gifbin0 -> 170 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_biggrin.gifbin0 -> 172 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_confused.gifbin0 -> 171 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_cool.gifbin0 -> 172 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_cry.gifbin0 -> 498 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_doubt.gifbin0 -> 990 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_doubt2.gifbin0 -> 992 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_eek.gifbin0 -> 170 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_evil.gifbin0 -> 236 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_exclaim.gifbin0 -> 236 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_frown.gifbin0 -> 171 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_fun.gifbin0 -> 590 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_idea.gifbin0 -> 176 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_kaddi.gifbin0 -> 991 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_lol.gifbin0 -> 336 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_mrgreen.gifbin0 -> 349 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_neutral.gifbin0 -> 171 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_question.gifbin0 -> 248 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_razz.gifbin0 -> 176 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_redface.gifbin0 -> 650 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_rolleyes.gifbin0 -> 485 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_sad.gifbin0 -> 171 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_silenced.gifbin0 -> 231 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_smile.gifbin0 -> 174 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_smile2.gifbin0 -> 174 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_surprised.gifbin0 -> 174 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_twisted.gifbin0 -> 238 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_wink.gifbin0 -> 170 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/success.pngbin0 -> 816 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/throbber.gifbin0 -> 875 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/bold.pngbin0 -> 433 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/chars.pngbin0 -> 619 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h.pngbin0 -> 360 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h1.pngbin0 -> 420 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h2.pngbin0 -> 442 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h3.pngbin0 -> 452 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h4.pngbin0 -> 432 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h5.pngbin0 -> 440 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hequal.pngbin0 -> 426 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hminus.pngbin0 -> 538 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hplus.pngbin0 -> 520 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hr.pngbin0 -> 329 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/image.pngbin0 -> 625 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/italic.pngbin0 -> 322 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/link.pngbin0 -> 579 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/linkextern.pngbin0 -> 962 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/mono.pngbin0 -> 385 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/ol.pngbin0 -> 403 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/sig.pngbin0 -> 569 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/smiley.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/strike.pngbin0 -> 415 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/ul.pngbin0 -> 383 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/underline.pngbin0 -> 375 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/trash.pngbin0 -> 476 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/up.pngbin0 -> 376 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/wrap.gifbin0 -> 86 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/index.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/admin.php809
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/ajax.php62
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/af/lang.php10
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ar/lang.php24
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/bg/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/bg/lang.php36
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/help.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/lang.php37
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca/lang.php38
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/cs/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/cs/lang.php37
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/da/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/da/lang.php42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/lang.php35
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de/lang.php47
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/el/help.txt10
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/el/lang.php43
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/en/help.txt12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/en/lang.php46
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eo/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eo/lang.php40
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/es/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/es/lang.php48
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/et/lang.php23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eu/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eu/lang.php34
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fa/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fa/lang.php38
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fi/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fi/lang.php36
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fr/help.txt9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fr/lang.php48
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/gl/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/gl/lang.php36
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/he/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/he/lang.php35
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hi/lang.php6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hr/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hu/help.txt12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hu/lang.php36
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/id-ni/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/id/lang.php21
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/is/lang.php15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/it/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/it/lang.php42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ja/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ja/lang.php39
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ko/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ko/lang.php41
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lt/lang.php22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lv/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lv/lang.php35
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/mr/help.txt12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/mr/lang.php37
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ne/lang.php27
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/nl/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/nl/lang.php45
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/no/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/no/lang.php46
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pl/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pl/lang.php38
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/lang.php47
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt/help.txt9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt/lang.php39
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ro/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ro/lang.php39
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ru/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ru/lang.php42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sk/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sk/lang.php38
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sl/lang.php21
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sr/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sr/lang.php37
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sv/help.txt8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sv/lang.php46
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/th/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/th/lang.php27
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/tr/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/tr/lang.php40
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/uk/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/uk/lang.php39
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/vi/lang.php21
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/lang.php40
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh/lang.php39
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/group.pngbin0 -> 753 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/ns.pngbin0 -> 853 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/page.pngbin0 -> 635 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/user.pngbin0 -> 706 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/script.js163
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/style.css96
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/action.php26
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/admin.php49
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/print.css274
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/style.css272
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/syntax.php287
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/index.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/COPYING340
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/CREDITS58
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/VERSION.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/action.php169
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/admin.php453
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/ajax.php196
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/changelog207
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/conf/default.php19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/conf/metadata.php18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/edit-full.js152
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/edit.js1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/close.gifbin0 -> 64 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/base.gifbin0 -> 578 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/empty.gifbin0 -> 62 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folder.gifbin0 -> 352 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderh.gifbin0 -> 572 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderhopen.gifbin0 -> 577 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderopen.gifbin0 -> 354 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/info.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/join.gifbin0 -> 69 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/joinbottom.gifbin0 -> 66 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/line.gifbin0 -> 66 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minus.gifbin0 -> 86 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minusbottom.gifbin0 -> 85 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_minus.gifbin0 -> 861 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_plus.gifbin0 -> 870 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/page.gifbin0 -> 565 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plus.gifbin0 -> 89 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plusbottom.gifbin0 -> 88 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/empty.gifbin0 -> 275 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/indexmenu_toolbar.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/larrow.gifbin0 -> 1829 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/msort.gifbin0 -> 420 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/rarrow.gifbin0 -> 81 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/toc_bullet.gifbin0 -> 74 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/inc/pclzip.lib.php5748
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/inc/repo.class.php51
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu-full.js640
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu.js18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/admmenu.js71
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/menu.js56
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/usrmenu.js69
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/de/lang.php27
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/en/lang.php28
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/es/lang.php28
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/it/lang.php29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex-full.js101
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex.js1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/script.js152
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/style.css190
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/syntax/indexmenu.php720
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/syntax/tag.php70
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/info/syntax.php259
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/important.pngbin0 -> 2250 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/note.pngbin0 -> 2520 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_important.pngbin0 -> 1366 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_note.pngbin0 -> 1461 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_tip.pngbin0 -> 1441 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_warning.pngbin0 -> 1870 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tip.pngbin0 -> 2909 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/warning.pngbin0 -> 3249 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/info.txt8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/script.js36
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/style.css41
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/syntax.php191
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/ChangeLog.txt255
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/README.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/ZipLib.class.php391
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/action.php41
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/conf/default.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/conf/metadata.php8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/info.txt8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/de/lang.php9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/en/lang.php12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/es/lang.php19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/fr/lang.php12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/it/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/ja/lang.php12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/ru/lang.php12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/zh/lang.php12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/odt.pngbin0 -> 3320 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/renderer.php1232
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/styles.xml158
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/syntax.php96
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/admin.php202
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/af/lang.php5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ar/lang.php6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/bg/intro.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/bg/lang.php15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/intro.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/lang.php15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca/lang.php18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/cs/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/cs/lang.php22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/da/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/da/lang.php19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de-informal/lang.php14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de/lang.php23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/el/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/el/lang.php20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/en/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/en/lang.php23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eo/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eo/lang.php22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/es/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/es/lang.php27
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eu/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eu/lang.php17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fa/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fa/lang.php19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fi/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fi/lang.php17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fr/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fr/lang.php22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/gl/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/gl/lang.php17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/he/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/he/lang.php16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hi/lang.php6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hr/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hu/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hu/lang.php17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/id-ni/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/id/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/is/lang.php10
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/it/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/it/lang.php20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ja/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ja/lang.php17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ko/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ko/lang.php18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lt/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lv/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lv/lang.php15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/mr/intro.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/mr/lang.php18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ne/lang.php16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/nl/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/nl/lang.php21
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/no/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/no/lang.php26
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pl/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pl/lang.php17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/lang.php25
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt/lang.php18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ro/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ro/lang.php20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ru/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ru/lang.php22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sk/intro.txt0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sk/lang.php17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sl/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sr/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sr/lang.php16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sv/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sv/lang.php28
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/th/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/th/lang.php19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/tr/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/tr/lang.php19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/uk/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/uk/lang.php18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/lang.php19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh/lang.php20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/README20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/conf/default.php4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/conf/metadata.php4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/en/lang.php3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/ru/lang.php3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/sp/lang.php3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/plugin.info.txt8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/renderer.php338
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/screen.gifbin0 -> 1574 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/syntax.php72
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/license.txt29
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/null.mp3bin0 -> 2508 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.js658
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.swfbin0 -> 2198 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/backgrnd.pngbin0 -> 10257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebg.gifbin0 -> 2295 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebottom.gifbin0 -> 3428 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluefooter.gifbin0 -> 591 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/header.pngbin0 -> 27487 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_over.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pretty.css173
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/backgrnd.pngbin0 -> 10257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/bodybg.gifbin0 -> 10119 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/footer.jpgbin0 -> 4451 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/header.pngbin0 -> 27487 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/iepngfix.htc42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_over.pngbin0 -> 789 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/opera.css7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_over.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pretty.css156
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_over.pngbin0 -> 748 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/print.css1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/s5-core.css9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/backgrnd.pngbin0 -> 10257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/footer.jpgbin0 -> 4451 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/header.pngbin0 -> 27487 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/iepngfix.htc42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/logo.pngbin0 -> 16746 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_over.pngbin0 -> 789 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/opera.css7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_over.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pretty.css163
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_over.pngbin0 -> 748 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/print.css1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/s5-core.css9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/MIT-LICENSE20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/builder.js136
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/controls.js965
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/dragdrop.js974
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/effects.js1123
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/presentacular.js153
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/prototype.js4874
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/scriptaculous.js68
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/slider.js275
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/sound.js59
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/unittest.js568
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/LEEME.txt31
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/backgrnd.pngbin0 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/header.pngbin0 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_over.pngbin0 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back-handout-print.pngbin0 -> 5999 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back-slide-print.pngbin0 -> 6487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back_console.pngbin0 -> 14135 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-foot.pngbin0 -> 451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-head.pngbin0 -> 450 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-head.xcfbin0 -> 6114 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-main.pngbin0 -> 92480 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/favicon.icobin0 -> 1406 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/logo.pngbin0 -> 9760 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/table-background.pngbin0 -> 460 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/table-header.pngbin0 -> 344 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pretty.css545
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_over.pngbin0 -> 1004 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/across.pngbin0 -> 178955 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_over.pngbin0 -> 1117 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/blank.gifbin0 -> 49 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/bottom.pngbin0 -> 41109 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/delay_link.pngbin0 -> 1943 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/druplicon.pngbin0 -> 9215 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_over.pngbin0 -> 1093 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/framing.css65
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/iepngfix.htc42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_over.pngbin0 -> 734 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes.css122
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_over.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pretty.css354
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_over.pngbin0 -> 1071 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/top.pngbin0 -> 74839 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/backgrnd.pngbin0 -> 10257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blume.jpgbin0 -> 6779 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blumerechts.jpgbin0 -> 2215 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/header.pngbin0 -> 27487 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_over.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pretty.css168
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_over.pngbin0 -> 1117 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/bg-slide.jpgbin0 -> 48642 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/framing.css23
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/iepngfix.htc42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_over.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pretty.css130
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/print.css1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/s5-core.css9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_over.pngbin0 -> 1004 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/LEEME.txt32
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/backgrnd.pngbin0 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/header.pngbin0 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_over.pngbin0 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back-handout-print.pngbin0 -> 5999 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back-slide-print.pngbin0 -> 6487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back_console.pngbin0 -> 14135 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-foot.pngbin0 -> 501 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-head.pngbin0 -> 2999 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-main.pngbin0 -> 1824 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-main2.pngbin0 -> 3735 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/favicon.icobin0 -> 1406 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/logo.pngbin0 -> 16331 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/table-background.pngbin0 -> 460 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/table-header.pngbin0 -> 247 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pretty.css583
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/finish.gifbin0 -> 1364 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/fixed.js1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/help.jpgbin0 -> 30942 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/iepngfix.htc42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/numeric.pngbin0 -> 7144 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/progress.gifbin0 -> 4237 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/00_head.txt8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/backgrnd.pngbin0 -> 10257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-shade.pngbin0 -> 594 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-slide.jpgbin0 -> 31239 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/header.pngbin0 -> 27487 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_over.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pretty.css139
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_over.pngbin0 -> 1004 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/LEEME.txt31
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/backgrnd.pngbin0 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/header.pngbin0 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_over.pngbin0 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back-handout-print.pngbin0 -> 5958 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back-slide-print.pngbin0 -> 5648 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back_console.pngbin0 -> 11708 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-foot.pngbin0 -> 397 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-head.pngbin0 -> 401 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-head.xcf.7zbin0 -> 2889 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-main.pngbin0 -> 27159 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-main2.pngbin0 -> 27171 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/favicon.icobin0 -> 1406 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/logo.pngbin0 -> 11222 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/table-background.pngbin0 -> 460 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/table-header.pngbin0 -> 654 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pretty.css584
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/backgrnd.pngbin0 -> 10257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/header.pngbin0 -> 27487 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_over.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelbg.gifbin0 -> 1716 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelheader.jpgbin0 -> 3571 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelslide0bg.gifbin0 -> 3180 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pretty.css166
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_over.pngbin0 -> 1004 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/LEEME.txt31
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/backgrnd.pngbin0 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/header.pngbin0 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_over.pngbin0 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-handout-print.pngbin0 -> 5999 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-index.pngbin0 -> 15049 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-slide-print.pngbin0 -> 6487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back_console.pngbin0 -> 14135 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-foot.pngbin0 -> 389 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-head.pngbin0 -> 373 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-main.pngbin0 -> 9066 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/favicon.icobin0 -> 318 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/logo.pngbin0 -> 1312 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/table-background.pngbin0 -> 460 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/table-header.pngbin0 -> 384 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pretty.css585
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/s5-notes.html157
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.jpgbin0 -> 3648 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.pngbin0 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/chalks.pngbin0 -> 30926 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.jpgbin0 -> 4451 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.pngbin0 -> 34238 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/framing.css22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/header.pngbin0 -> 49918 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_over.pngbin0 -> 789 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/opera.css7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/outline.css14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_over.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pretty.css162
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_over.pngbin0 -> 748 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/print.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/s5-core.css8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/triangle.pngbin0 -> 81350 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/backgrnd.pngbin0 -> 12943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/bank.pngbin0 -> 41837 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.jpgbin0 -> 4451 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.pngbin0 -> 62136 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/framing.css22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/header.pngbin0 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_over.pngbin0 -> 789 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/opera.css7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/outline.css14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pattern.pngbin0 -> 226 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_over.pngbin0 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pretty.css163
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_over.pngbin0 -> 748 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/print.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/s5-core.css8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/sun.pngbin0 -> 32851 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_over.pngbin0 -> 1004 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/LEEME.txt31
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/backgrnd.pngbin0 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/header.pngbin0 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_over.pngbin0 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back-handout-print.pngbin0 -> 5999 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back-slide-print.pngbin0 -> 6487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back_console.pngbin0 -> 14135 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-foot.pngbin0 -> 604 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-head.pngbin0 -> 605 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-main.pngbin0 -> 51209 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/favicon.icobin0 -> 1406 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/logo.pngbin0 -> 14675 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/table-background.pngbin0 -> 460 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/table-header.pngbin0 -> 309 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pretty.css583
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_over.pngbin0 -> 1004 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/LEEME.txt36
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/backgrnd.pngbin0 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/header.pngbin0 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_over.pngbin0 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-foot.pngbin0 -> 1705 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-head.pngbin0 -> 1700 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-main.pngbin0 -> 358052 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/favicon.icobin0 -> 1150 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/logo.pngbin0 -> 13015 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/table-background.pngbin0 -> 460 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/table-header.pngbin0 -> 309 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pretty.css583
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_over.pngbin0 -> 1004 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/LEEME.txt31
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/backgrnd.pngbin0 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/header.pngbin0 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/index.php102
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_over.pngbin0 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back-handout-print.pngbin0 -> 5999 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back-slide-print.pngbin0 -> 6487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back_console.pngbin0 -> 14135 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-foot.pngbin0 -> 451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-head.pngbin0 -> 450 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-head.xcfbin0 -> 6114 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-main.pngbin0 -> 92480 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/favicon.icobin0 -> 1406 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/logo.jpgbin0 -> 7126 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/table-background.pngbin0 -> 460 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/table-header.pngbin0 -> 344 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pretty.css525
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.js2846
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_over.pngbin0 -> 1004 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/LEEME.txt32
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/backgrnd.pngbin0 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/header.pngbin0 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/images/favicon.icobin0 -> 3638 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_over.pngbin0 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-foot.pngbin0 -> 269 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-head.pngbin0 -> 273 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-main.pngbin0 -> 14732 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot.pngbin0 -> 670 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot2.pngbin0 -> 422 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/h1icon.pngbin0 -> 2999 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/link.pngbin0 -> 447 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/logo.pngbin0 -> 15020 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/mail.pngbin0 -> 993 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pretty.css543
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bkgr.jpgbin0 -> 9069 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bodybg.gifbin0 -> 10119 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.gifbin0 -> 5087 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.pngbin0 -> 4494 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/iepngfix.htc42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_over.pngbin0 -> 789 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/opera.css7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_over.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pretty.css1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_over.pngbin0 -> 748 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/print.css1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/s5-core.css9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/backgrnd.pngbin0 -> 10257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/bodybg.gifbin0 -> 1373 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/button.gifbin0 -> 920 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/head.gifbin0 -> 1373 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/header.pngbin0 -> 27487 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_over.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pretty.css221
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/s5-core.css9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slide0h1.gifbin0 -> 3143 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle.gifbin0 -> 1128 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/syntax.php281
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/script.js207
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/style.css7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/syntax.php79
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/admin.php627
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/images/search.pngbin0 -> 733 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/af/lang.php14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/lang.php27
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/lang.php48
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/lang.php49
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/lang.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/lang.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/lang.php52
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/lang.php48
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/lang.php56
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/lang.php53
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/lang.php58
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/lang.php54
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/lang.php60
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/lang.php47
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/lang.php51
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/lang.php49
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/lang.php55
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/lang.php49
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/lang.php48
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hi/lang.php6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hr/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/add.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/delete.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/intro.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/lang.php49
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/list.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id-ni/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/lang.php47
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/is/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/is/lang.php18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/lang.php54
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/lang.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/lang.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/add.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/delete.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/intro.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/lang.php48
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/list.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/lang.php48
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/lang.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/lang.php49
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/lang.php53
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/lang.php56
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/lang.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/lang.php57
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/lang.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/lang.php52
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/lang.php56
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/add.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/delete.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/intro.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/lang.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/list.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/lang.php20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/lang.php48
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/lang.php58
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/lang.php47
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/lang.php51
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/lang.php52
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/lang.php52
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/lang.php51
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/script.js9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/style.css20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/ajax.js68
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/cookie.js112
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/drag.js99
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/edit.js442
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/events.js176
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/helpers.js146
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.js116
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/linkwiz.js282
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/media.js351
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/pngbehavior.htc53
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/script.js561
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/textselection.js226
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/toolbar.js252
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/tw-sack.js136
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/styles/feed.css63
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/styles/index.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/styles/style.css113
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/conf/default.php8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/conf/metadata.php9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/design.css796
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/detail.php89
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/footer.html41
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/bullet.gifbin0 -> 50 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-cc.gifbin0 -> 1231 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-css.pngbin0 -> 299 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-donate.gifbin0 -> 187 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-dw.pngbin0 -> 427 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-php.gifbin0 -> 269 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-rss.pngbin0 -> 280 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-xhtml.pngbin0 -> 321 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/buttonshadow.pngbin0 -> 257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/closed.gifbin0 -> 54 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/favicon.icobin0 -> 7406 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/inputshadow.pngbin0 -> 155 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/link_icon.gifbin0 -> 942 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/mail_icon.gifbin0 -> 918 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/open.gifbin0 -> 54 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/sidebar-border.gifbin0 -> 34 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/tocdot2.gifbin0 -> 810 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/windows.gifbin0 -> 223 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/layout.css79
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/main.php69
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/main_index.php135
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/media.css205
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/media.php54
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediaedit.php88
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediamanager.php44
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediaref.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/print.css238
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/rtl.css119
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar.css189
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar.php9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar_print.css9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/style.ini67
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/tplfn_sidebar.php98
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/_admin.css43
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/_linkwiz.css68
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/design.css835
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/detail.php89
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/footer.html41
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/UWEB.pngbin0 -> 1138 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/UWEBshadow.pngbin0 -> 1123 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/bullet.gifbin0 -> 50 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-cc.gifbin0 -> 1231 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-css.pngbin0 -> 299 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-donate.gifbin0 -> 187 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-dw.pngbin0 -> 427 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-php.gifbin0 -> 207 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-rss.pngbin0 -> 280 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-xhtml.pngbin0 -> 321 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/buttonshadow.pngbin0 -> 257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/closed.gifbin0 -> 54 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/favicon.icobin0 -> 7406 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/inputshadow.pngbin0 -> 155 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/link_icon.gifbin0 -> 942 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/mail_icon.gifbin0 -> 918 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/open.gifbin0 -> 54 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/tocdot2.gifbin0 -> 810 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/windows.gifbin0 -> 223 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/layout.css79
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/main.php27
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/main_index.php121
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/media.css205
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/mediamanager.php44
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/print.css238
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/rtl.css119
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/style.ini67
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/index.php68
1891 files changed, 117061 insertions, 0 deletions
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/_fla/MultipleUpload.as b/mod/dokuwiki/vendors/dokuwiki/lib/_fla/MultipleUpload.as
new file mode 100644
index 000000000..c5e7799f9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/_fla/MultipleUpload.as
@@ -0,0 +1,329 @@
+/**
+ * Flash Multi Upload
+ *
+ * Based on a example from Alastair Dawson
+ *
+ * @link http://blog.vixiom.com/2006/09/08/multiple-file-upload-with-flash-and-ruby-on-rails/
+ * @author Alastair Dawson
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+// delegate
+import mx.utils.Delegate;
+// ui components
+import mx.controls.DataGrid;
+import mx.controls.gridclasses.DataGridColumn
+import mx.controls.Button;
+import mx.controls.TextInput;
+import mx.controls.CheckBox;
+import mx.controls.Label;
+// file reference
+import flash.net.FileReferenceList;
+import flash.net.FileReference;
+
+class MultipleUpload {
+
+ private var fileRef:FileReferenceList;
+ private var fileRefListener:Object;
+ private var list:Array;
+ private var dp:Array;
+
+ private var files_dg:DataGrid;
+ private var browse_btn:Button;
+ private var upload_btn:Button;
+ private var ns_input:TextInput;
+ private var ns_label:Label;
+ private var overwrite_cb:CheckBox;
+
+ private var url:String;
+ private var upurl:String;
+ private var current:Number;
+ private var done:Number;
+ private var lasterror:String;
+
+ /**
+ * Constructor.
+ *
+ * Initializes the needed objects and stage objects
+ */
+ public function MultipleUpload(fdg:DataGrid, bb:Button, ub:Button, nsi:TextInput, nsl:Label, ob:CheckBox) {
+ // references for objects on the stage
+ files_dg = fdg;
+ browse_btn = bb;
+ upload_btn = ub;
+ ns_input = nsi;
+ ns_label = nsl;
+ overwrite_cb = ob;
+
+ // file list references & listener
+ fileRef = new FileReferenceList();
+ fileRefListener = new Object();
+ fileRef.addListener(fileRefListener);
+
+ // setup
+ iniUI();
+ inifileRefListener();
+ }
+
+ /**
+ * Initializes the User Interface
+ *
+ * Uses flashvars to access possibly localized names
+ */
+ private function iniUI() {
+ // register button handlers
+ browse_btn.onRelease = Delegate.create(this, this.browse);
+ upload_btn.onRelease = Delegate.create(this, this.upload);
+
+ // columns for dataGrid
+ var col:DataGridColumn;
+ col = new DataGridColumn('name');
+ col.headerText = ( _root.L_gridname ? _root.L_gridname : 'Filename' );
+ col.sortable = false;
+ files_dg.addColumn(col);
+ col = new DataGridColumn('size');
+ col.headerText = ( _root.L_gridsize ? _root.L_gridsize : 'Size' );
+ col.sortable = false;
+ files_dg.addColumn(col);
+ col = new DataGridColumn('status');
+ col.headerText = ( _root.L_gridstat ? _root.L_gridstat : 'Status' );
+ col.sortable = false;
+ files_dg.addColumn(col);
+
+ // label translations
+ if(_root.L_overwrite) overwrite_cb.label = _root.L_overwrite;
+ if(_root.L_browse) browse_btn.label = _root.L_browse;
+ if(_root.L_upload) upload_btn.label = _root.L_upload;
+ if(_root.L_namespace) ns_label.text = _root.L_namespace;
+
+ // prefill input field
+ if(_root.O_ns) ns_input.text = _root.O_ns;
+
+ // disable buttons
+ upload_btn.enabled = false;
+ if(!_root.O_overwrite) overwrite_cb.visible = false;
+
+ // initalize the data provider list
+ dp = new Array();
+ list = new Array();
+ files_dg.spaceColumnsEqually();
+ }
+
+ /**
+ * Open files selection dialog
+ *
+ * Adds the allowed file types
+ */
+ private function browse() {
+ if(_root.O_extensions){
+ var exts:Array = _root.O_extensions.split('|');
+ var filter:Object = new Object();
+ filter.description = (_root.L_filetypes ? _root.L_filetypes : 'Allowed filetypes');
+ filter.extension = '';
+ for(var i:Number = 0; i<exts.length; i++){
+ filter.extension += '*.'+exts[i]+';';
+ }
+ filter.extension = filter.extension.substr(0,filter.extension.length-1);
+ var apply:Array = new Array();
+ apply.push(filter);
+ fileRef.browse(apply);
+ }else{
+ fileRef.browse();
+ }
+ }
+
+ /**
+ * Initiates the upload process
+ */
+ private function upload() {
+ // prepare backend URL
+ this.url = _root.O_backend; // from flashvars
+ this.url += '&ns='+escape(ns_input.text);
+
+ // prepare upload url
+ this.upurl = this.url;
+ this.upurl += '&sectok='+escape(_root.O_sectok);
+ this.upurl += '&authtok='+escape(_root.O_authtok);
+ if(overwrite_cb.selected) this.upurl += '&ow=1';
+
+ // disable buttons
+ upload_btn.enabled = false;
+ browse_btn.enabled = false;
+ ns_input.enabled = false;
+ overwrite_cb.enabled = false;
+
+ // init states
+ this.current = -1;
+ this.done = 0;
+ this.lasterror = '';
+
+ // start process detached
+ _global.setTimeout(this,'uploadNext',100);
+ nextFrame();
+ }
+
+ /**
+ * Uploads the next file in the list
+ */
+ private function uploadNext(){
+ this.current++;
+ if(this.current >= this.list.length){
+ return this.uploadDone();
+ }
+
+ var file = this.list[this.current];
+
+ if(_root.O_maxsize && (file.size > _root.O_maxsize)){
+ this.lasterror = (_root.L_toobig ? _root.L_toobig : 'too big');
+ _global.setTimeout(this,'uploadNext',100);
+ nextFrame();
+ }else{
+ file.addListener(fileRefListener);
+ file.upload(upurl);
+ // continues in the handlers
+ }
+ }
+
+ /**
+ * Redirect to the namespace and set a success/error message
+ *
+ * Called when all files in the list where processed
+ */
+ private function uploadDone(){
+ var info = (_root.L_info ? _root.L_info : 'files uploaded');
+ if(this.done == this.list.length){
+ this.url += '&msg1='+escape(this.done+'/'+this.list.length+' '+info);
+ }else{
+ var lasterr = (_root.L_lasterr ? _root.L_lasterr : 'Last error:');
+ this.url += '&err='+escape(this.done+'/'+this.list.length+' '+info+' '+lasterr+' '+this.lasterror);
+ }
+
+ // when done redirect
+ getURL(this.url,'_self');
+ }
+
+ /**
+ * Set the status of a given file in the data grid
+ */
+ private function setStatus(file,msg){
+ for(var i:Number = 0; i < list.length; i++) {
+ if (list[i].name == file.name) {
+ files_dg.editField(i, 'status', msg);
+ nextFrame();
+ return;
+ }
+ }
+ }
+
+ /**
+ * Initialize the file reference listener
+ */
+ private function inifileRefListener() {
+ fileRefListener.onSelect = Delegate.create(this, this.onSelect);
+ fileRefListener.onCancel = Delegate.create(this, this.onCancel);
+ fileRefListener.onOpen = Delegate.create(this, this.onOpen);
+ fileRefListener.onProgress = Delegate.create(this, this.onProgress);
+ fileRefListener.onComplete = Delegate.create(this, this.onComplete);
+ fileRefListener.onHTTPError = Delegate.create(this, this.onHTTPError);
+ fileRefListener.onIOError = Delegate.create(this, this.onIOError);
+ fileRefListener.onSecurityError = Delegate.create(this, this.onSecurityError);
+ }
+
+ /**
+ * Handle file selection
+ *
+ * Files are added as in a list of references and beautified into the data grid dataprovider array
+ *
+ * Multiple browses will add to the list
+ */
+ private function onSelect(fileRefList:FileReferenceList) {
+ var sel = fileRefList.fileList;
+ for(var i:Number = 0; i < sel.length; i++) {
+ // check size
+ var stat:String;
+ if(_root.O_maxsize && sel[i].size > _root.O_maxsize){
+ stat = (_root.L_toobig ? _root.L_toobig : 'too big');
+ }else{
+ stat = (_root.L_ready ? _root.L_ready : 'ready for upload');
+ }
+ // add to grid
+ dp.push({name:sel[i].name, size:Math.round(sel[i].size / 1000) + " kb", status:stat});
+ // add to reference list
+ list.push(sel[i]);
+ }
+ // update dataGrid
+ files_dg.dataProvider = dp;
+ files_dg.spaceColumnsEqually();
+
+ if(list.length > 0) upload_btn.enabled = true;
+ }
+
+ /**
+ * Does nothing
+ */
+ private function onCancel() {
+ }
+
+ /**
+ * Does nothing
+ */
+ private function onOpen(file:FileReference) {
+ }
+
+ /**
+ * Set the upload progress
+ */
+ private function onProgress(file:FileReference, bytesLoaded:Number, bytesTotal:Number) {
+ var percentDone = Math.round((bytesLoaded / bytesTotal) * 100);
+ var msg:String = 'uploading @PCT@%';
+ if(_root.L_progress) msg = _root.L_progress;
+ msg = msg.split('@PCT@').join(percentDone);
+ this.setStatus(file,msg);
+ }
+
+ /**
+ * Handle upload completion
+ */
+ private function onComplete(file:FileReference) {
+ this.setStatus(file,(_root.L_done ? _root.L_done : 'complete'));
+ this.done++;
+ uploadNext();
+ }
+
+ /**
+ * Handle upload errors
+ */
+ private function onHTTPError(file:FileReference, httpError:Number) {
+ var error;
+ if(httpError == 400){
+ error = (_root.L_fail ? _root.L_fail : 'failed');
+ }else if(httpError == 401){
+ error = (_root.L_authfail ? _root.L_authfail : 'auth failed');
+ }else{
+ error = "HTTP Error " + httpError
+ }
+ this.setStatus(file,error);
+ this.lasterror = error;
+ uploadNext();
+ }
+
+ /**
+ * Handle IO errors
+ */
+ private function onIOError(file:FileReference) {
+ this.setStatus(file,"IO Error");
+ this.lasterror = "IO Error";
+ uploadNext();
+ }
+
+ /**
+ * Handle Security errors
+ */
+ private function onSecurityError(file:FileReference, errorString:String) {
+ this.setStatus(file,"SecurityError: " + errorString);
+ this.lasterror = "SecurityError: " + errorString;
+ uploadNext();
+ }
+
+
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/_fla/README b/mod/dokuwiki/vendors/dokuwiki/lib/_fla/README
new file mode 100644
index 000000000..6ecc72ac1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/_fla/README
@@ -0,0 +1,4 @@
+This directory contains the sources for the Flash Multiuploader. Its based on
+a example from Alastair Dawson given at
+http://blog.vixiom.com/2006/09/08/multiple-file-upload-with-flash-and-ruby-on-rails/
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/_fla/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/_fla/index.html
new file mode 100644
index 000000000..d614603ac
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/_fla/index.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="refresh" content="0; URL=../../" />
+<meta name="robots" content="noindex" />
+<title>nothing here...</title>
+</head>
+<body>
+<!-- this is just here to prevent directory browsing -->
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/_fla/multipleUpload.fla b/mod/dokuwiki/vendors/dokuwiki/lib/_fla/multipleUpload.fla
new file mode 100644
index 000000000..220616960
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/_fla/multipleUpload.fla
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/exe/ajax.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/ajax.php
new file mode 100644
index 000000000..4618abd71
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/ajax.php
@@ -0,0 +1,370 @@
+<?php
+/**
+ * DokuWiki AJAX call handler
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+//fix for Opera XMLHttpRequests
+if(!count($_POST) && $HTTP_RAW_POST_DATA){
+ parse_str($HTTP_RAW_POST_DATA, $_POST);
+}
+
+if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
+require_once(DOKU_INC.'inc/init.php');
+require_once(DOKU_INC.'inc/common.php');
+require_once(DOKU_INC.'inc/pageutils.php');
+require_once(DOKU_INC.'inc/auth.php');
+//close sesseion
+session_write_close();
+
+header('Content-Type: text/html; charset=utf-8');
+
+
+//call the requested function
+if(isset($_POST['call']))
+ $call = $_POST['call'];
+else if(isset($_GET['call']))
+ $call = $_GET['call'];
+else
+ exit;
+
+$callfn = 'ajax_'.$call;
+
+if(function_exists($callfn)){
+ $callfn();
+}else{
+ $evt = new Doku_Event('AJAX_CALL_UNKNOWN', $call);
+ if ($evt->advise_before()) {
+ print "AJAX call '".htmlspecialchars($call)."' unknown!\n";
+ exit;
+ }
+ $evt->advise_after();
+ unset($evt);
+}
+
+/**
+ * Searches for matching pagenames
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function ajax_qsearch(){
+ global $conf;
+ global $lang;
+
+ $query = cleanID($_POST['q']);
+ if(empty($query)) $query = cleanID($_GET['q']);
+ if(empty($query)) return;
+
+ require_once(DOKU_INC.'inc/html.php');
+ require_once(DOKU_INC.'inc/fulltext.php');
+
+ $data = array();
+ $data = ft_pageLookup($query);
+
+ if(!count($data)) return;
+
+ print '<strong>'.$lang['quickhits'].'</strong>';
+ print '<ul>';
+ foreach($data as $id){
+ print '<li>';
+ $ns = getNS($id);
+ if($ns){
+ $name = shorten(noNS($id), ' ('.$ns.')',30);
+ }else{
+ $name = $id;
+ }
+ print html_wikilink(':'.$id,$name);
+ print '</li>';
+ }
+ print '</ul>';
+}
+
+/**
+ * Support OpenSearch suggestions
+ *
+ * @link http://www.opensearch.org/Specifications/OpenSearch/Extensions/Suggestions/1.0
+ * @author Mike Frysinger <vapier@gentoo.org>
+ */
+function ajax_suggestions() {
+ global $conf;
+ global $lang;
+
+ $query = cleanID($_POST['q']);
+ if(empty($query)) $query = cleanID($_GET['q']);
+ if(empty($query)) return;
+
+ require_once(DOKU_INC.'inc/html.php');
+ require_once(DOKU_INC.'inc/fulltext.php');
+ require_once(DOKU_INC.'inc/JSON.php');
+
+ $data = array();
+ $data = ft_pageLookup($query);
+ if(!count($data)) return;
+
+ // limit results to 15 hits
+ $data = array_slice($data, 0, 15);
+ $data = array_map('trim',$data);
+ $data = array_map('noNS',$data);
+ $data = array_unique($data);
+ sort($data);
+
+ /* now construct a json */
+ $suggestions = array(
+ $query, // the original query
+ $data, // some suggestions
+ array(), // no description
+ array() // no urls
+ );
+ $json = new JSON();
+
+ header('Content-Type: application/x-suggestions+json');
+ print $json->encode($suggestions);
+}
+
+/**
+ * Refresh a page lock and save draft
+ *
+ * Andreas Gohr <andi@splitbrain.org>
+ */
+function ajax_lock(){
+ global $conf;
+ global $lang;
+ $id = cleanID($_POST['id']);
+ if(empty($id)) return;
+
+ if(!checklock($id)){
+ lock($id);
+ echo 1;
+ }
+
+ if($conf['usedraft'] && $_POST['wikitext']){
+ $client = $_SERVER['REMOTE_USER'];
+ if(!$client) $client = clientIP(true);
+
+ $draft = array('id' => $id,
+ 'prefix' => $_POST['prefix'],
+ 'text' => $_POST['wikitext'],
+ 'suffix' => $_POST['suffix'],
+ 'date' => $_POST['date'],
+ 'client' => $client,
+ );
+ $cname = getCacheName($draft['client'].$id,'.draft');
+ if(io_saveFile($cname,serialize($draft))){
+ echo $lang['draftdate'].' '.dformat();
+ }
+ }
+
+}
+
+/**
+ * Delete a draft
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function ajax_draftdel(){
+ $id = cleanID($_POST['id']);
+ if(empty($id)) return;
+
+ $client = $_SERVER['REMOTE_USER'];
+ if(!$client) $client = clientIP(true);
+
+ $cname = getCacheName($client.$id,'.draft');
+ @unlink($cname);
+}
+
+/**
+ * Return subnamespaces for the Mediamanager
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function ajax_medians(){
+ global $conf;
+ require_once(DOKU_INC.'inc/search.php');
+ require_once(DOKU_INC.'inc/media.php');
+
+ // wanted namespace
+ $ns = cleanID($_POST['ns']);
+ $dir = utf8_encodeFN(str_replace(':','/',$ns));
+
+ $lvl = count(explode(':',$ns));
+
+ $data = array();
+ search($data,$conf['mediadir'],'search_index',array('nofiles' => true),$dir);
+ foreach($data as $item){
+ $item['level'] = $lvl+1;
+ echo media_nstree_li($item);
+ echo media_nstree_item($item);
+ echo '</li>';
+ }
+}
+
+/**
+ * Return list of files for the Mediamanager
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function ajax_medialist(){
+ global $conf;
+ global $NS;
+ require_once(DOKU_INC.'inc/media.php');
+ require_once(DOKU_INC.'inc/template.php');
+
+ $NS = $_POST['ns'];
+ tpl_mediaContent(true);
+}
+
+/**
+ * Return list of search result for the Mediamanager
+ *
+ * @author Tobias Sarnowski <sarnowski@cosmocode.de>
+ */
+function ajax_mediasearchlist(){
+ global $conf;
+ require_once(DOKU_INC.'inc/media.php');
+
+ media_searchlist($_POST['ns']);
+}
+
+/**
+ * Return sub index for index view
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function ajax_index(){
+ global $conf;
+ require_once(DOKU_INC.'inc/search.php');
+ require_once(DOKU_INC.'inc/html.php');
+
+ // wanted namespace
+ $ns = cleanID($_POST['idx']);
+ $dir = utf8_encodeFN(str_replace(':','/',$ns));
+
+ $lvl = count(explode(':',$ns));
+
+ $data = array();
+ search($data,$conf['datadir'],'search_index',array('ns' => $ns),$dir);
+ foreach($data as $item){
+ $item['level'] = $lvl+1;
+ echo html_li_index($item);
+ echo '<div class="li">';
+ echo html_list_index($item);
+ echo '</div>';
+ echo '</li>';
+ }
+}
+
+/**
+ * List matching namespaces and pages for the link wizard
+ *
+ * @author Andreas Gohr <gohr@cosmocode.de>
+ */
+function ajax_linkwiz(){
+ global $conf;
+ global $lang;
+ require_once(DOKU_INC.'inc/html.php');
+
+ $q = ltrim($_POST['q'],':');
+ $id = noNS($q);
+ $ns = getNS($q);
+
+ $ns = cleanID($ns);
+ $id = cleanID($id);
+
+ $nsd = utf8_encodeFN(str_replace(':','/',$ns));
+ $idd = utf8_encodeFN(str_replace(':','/',$id));
+
+ $data = array();
+ if($q && !$ns){
+
+ // use index to lookup matching pages
+ require_once(DOKU_INC.'inc/fulltext.php');
+ require_once(DOKU_INC.'inc/parserutils.php');
+ $pages = array();
+ $pages = ft_pageLookup($id,false);
+
+ // result contains matches in pages and namespaces
+ // we now extract the matching namespaces to show
+ // them seperately
+ $dirs = array();
+ $count = count($pages);
+ for($i=0; $i<$count; $i++){
+ if(strpos(noNS($pages[$i]),$id) === false){
+ // match was in the namespace
+ $dirs[getNS($pages[$i])] = 1; // assoc array avoids dupes
+ }else{
+ // it is a matching page, add it to the result
+ $data[] = array(
+ 'id' => $pages[$i],
+ 'title' => p_get_first_heading($pages[$i],false),
+ 'type' => 'f',
+ );
+ }
+ unset($pages[$i]);
+ }
+ foreach($dirs as $dir => $junk){
+ $data[] = array(
+ 'id' => $dir,
+ 'type' => 'd',
+ );
+ }
+
+ }else{
+
+ require_once(DOKU_INC.'inc/search.php');
+ $opts = array(
+ 'depth' => 1,
+ 'listfiles' => true,
+ 'listdirs' => true,
+ 'pagesonly' => true,
+ 'firsthead' => true,
+ );
+ if($id) $opts['filematch'] = '^.*\/'.$id;
+ if($id) $opts['dirmatch'] = '^.*\/'.$id;
+ search($data,$conf['datadir'],'search_universal',$opts,$nsd);
+
+ // add back to upper
+ if($ns){
+ array_unshift($data,array(
+ 'id' => getNS($ns),
+ 'type' => 'u',
+ ));
+ }
+ }
+
+ // fixme sort results in a useful way ?
+
+ if(!count($data)){
+ echo $lang['nothingfound'];
+ exit;
+ }
+
+ // output the found data
+ $even = 1;
+ foreach($data as $item){
+ $even *= -1; //zebra
+
+ if(($item['type'] == 'd' || $item['type'] == 'u') && $item['id']) $item['id'] .= ':';
+ $link = wl($item['id']);
+
+ echo '<div class="'.(($even > 0)?'even':'odd').' type_'.$item['type'].'">';
+
+
+ if($item['type'] == 'u'){
+ $name = $lang['upperns'];
+ }else{
+ $name = htmlspecialchars($item['id']);
+ }
+
+ echo '<a href="'.$link.'" title="'.htmlspecialchars($item['id']).'" class="wikilink1">'.$name.'</a>';
+
+ if($item['title']){
+ echo '<span>'.htmlspecialchars($item['title']).'</span>';
+ }
+ echo '</div>';
+ }
+
+}
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/exe/css.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/css.php
new file mode 100644
index 000000000..2cb383de0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/css.php
@@ -0,0 +1,330 @@
+<?php
+/**
+ * DokuWiki StyleSheet creator
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
+if(!defined('NOSESSION')) define('NOSESSION',true); // we do not use a session or authentication here (better caching)
+if(!defined('DOKU_DISABLE_GZIP_OUTPUT')) define('DOKU_DISABLE_GZIP_OUTPUT',1); // we gzip ourself here
+require_once(DOKU_INC.'inc/init.php');
+require_once(DOKU_INC.'inc/pageutils.php');
+require_once(DOKU_INC.'inc/httputils.php');
+require_once(DOKU_INC.'inc/io.php');
+require_once(DOKU_INC.'inc/confutils.php');
+
+// Main (don't run when UNIT test)
+if(!defined('SIMPLE_TEST')){
+ header('Content-Type: text/css; charset=utf-8');
+ css_out();
+}
+
+
+// ---------------------- functions ------------------------------
+
+/**
+ * Output all needed Styles
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function css_out(){
+ global $conf;
+ global $lang;
+ $style = '';
+ if (isset($_REQUEST['s']) &&
+ in_array($_REQUEST['s'], array('all', 'print', 'feed'))) {
+ $style = $_REQUEST['s'];
+ }
+
+ $tpl = trim(preg_replace('/[^\w-]+/','',$_REQUEST['t']));
+ if($tpl){
+ $tplinc = DOKU_INC.'lib/tpl/'.$tpl.'/';
+ $tpldir = DOKU_BASE.'lib/tpl/'.$tpl.'/';
+ }else{
+ $tplinc = DOKU_TPLINC;
+ $tpldir = DOKU_TPL;
+ }
+
+ // The generated script depends on some dynamic options
+ $cache = getCacheName('styles'.$_SERVER['HTTP_HOST'].$_SERVER['SERVER_PORT'].DOKU_BASE.$tplinc.$style,'.css');
+
+ // load template styles
+ $tplstyles = array();
+ if(@file_exists($tplinc.'style.ini')){
+ $ini = parse_ini_file($tplinc.'style.ini',true);
+ foreach($ini['stylesheets'] as $file => $mode){
+ $tplstyles[$mode][$tplinc.$file] = $tpldir;
+ }
+ }
+
+ // Array of needed files and their web locations, the latter ones
+ // are needed to fix relative paths in the stylesheets
+ $files = array();
+ //if (isset($tplstyles['all'])) $files = array_merge($files, $tplstyles['all']);
+ if(!empty($style)){
+ $files[DOKU_INC.'lib/styles/'.$style.'.css'] = DOKU_MEDIA.'lib/styles/';
+ // load plugin, template, user styles
+ $files = array_merge($files, css_pluginstyles($style));
+ if (isset($tplstyles[$style])) $files = array_merge($files, $tplstyles[$style]);
+ $files[DOKU_CONF.'user'.$style.'.css'] = DOKU_MEDIA;
+ }else{
+ $files[DOKU_INC.'lib/styles/style.css'] = DOKU_MEDIA.'lib/styles/';
+ // load plugin, template, user styles
+ $files = array_merge($files, css_pluginstyles('screen'));
+ if (isset($tplstyles['screen'])) $files = array_merge($files, $tplstyles['screen']);
+ if($lang['direction'] == 'rtl'){
+ if (isset($tplstyles['rtl'])) $files = array_merge($files, $tplstyles['rtl']);
+ }
+ $files[DOKU_CONF.'userstyle.css'] = DOKU_BASE;
+ }
+
+ // check cache age & handle conditional request
+ header('Cache-Control: public, max-age=3600');
+ header('Pragma: public');
+ if(css_cacheok($cache,array_keys($files),$tplinc)){
+ http_conditionalRequest(filemtime($cache));
+ if($conf['allowdebug']) header("X-CacheUsed: $cache");
+
+ // finally send output
+ if ($conf['gzip_output'] && http_gzip_valid($cache)) {
+ header('Vary: Accept-Encoding');
+ header('Content-Encoding: gzip');
+ readfile($cache.".gz");
+ } else {
+ if (!http_sendfile($cache)) readfile($cache);
+ }
+
+ return;
+ } else {
+ http_conditionalRequest(time());
+ }
+
+ // start output buffering and build the stylesheet
+ ob_start();
+
+ // print the default classes for interwiki links and file downloads
+ css_interwiki();
+ css_filetypes();
+
+ // load files
+ foreach($files as $file => $location){
+ print css_loadfile($file, $location);
+ }
+
+ // end output buffering and get contents
+ $css = ob_get_contents();
+ ob_end_clean();
+
+ // apply style replacements
+ $css = css_applystyle($css,$tplinc);
+
+ // compress whitespace and comments
+ if($conf['compress']){
+ $css = css_compress($css);
+ }
+
+ // save cache file
+ io_saveFile($cache,$css);
+ if(function_exists('gzopen')) io_saveFile("$cache.gz",$css);
+
+ // finally send output
+ if ($conf['gzip_output']) {
+ header('Vary: Accept-Encoding');
+ header('Content-Encoding: gzip');
+ print gzencode($css,9,FORCE_GZIP);
+ } else {
+ print $css;
+ }
+}
+
+/**
+ * Checks if a CSS Cache file still is valid
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function css_cacheok($cache,$files,$tplinc){
+ global $config_cascade;
+
+ if(isset($_REQUEST['purge'])) return false; //support purge request
+
+ $ctime = @filemtime($cache);
+ if(!$ctime) return false; //There is no cache
+
+ // some additional files to check
+ $files = array_merge($files, getConfigFiles('main'));
+ $files[] = $tplinc.'style.ini';
+ $files[] = __FILE__;
+
+ // now walk the files
+ foreach($files as $file){
+ if(@filemtime($file) > $ctime){
+ return false;
+ }
+ }
+ return true;
+}
+
+/**
+ * Does placeholder replacements in the style according to
+ * the ones defined in a templates style.ini file
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function css_applystyle($css,$tplinc){
+ if(@file_exists($tplinc.'style.ini')){
+ $ini = parse_ini_file($tplinc.'style.ini',true);
+ $css = strtr($css,$ini['replacements']);
+ }
+ return $css;
+}
+
+/**
+ * Prints classes for interwikilinks
+ *
+ * Interwiki links have two classes: 'interwiki' and 'iw_$name>' where
+ * $name is the identifier given in the config. All Interwiki links get
+ * an default style with a default icon. If a special icon is available
+ * for an interwiki URL it is set in it's own class. Both classes can be
+ * overwritten in the template or userstyles.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function css_interwiki(){
+
+ // default style
+ echo 'a.interwiki {';
+ echo ' background: transparent url('.DOKU_MEDIA.'lib/images/interwiki.png) 0px 1px no-repeat;';
+ echo ' padding-left: 16px;';
+ echo '}';
+
+ // additional styles when icon available
+ $iwlinks = getInterwiki();
+ foreach(array_keys($iwlinks) as $iw){
+ $class = preg_replace('/[^_\-a-z0-9]+/i','_',$iw);
+ if(@file_exists(DOKU_INC.'lib/images/interwiki/'.$iw.'.png')){
+ echo "a.iw_$class {";
+ echo ' background-image: url('.DOKU_MEDIA.'lib/images/interwiki/'.$iw.'.png)';
+ echo '}';
+ }elseif(@file_exists(DOKU_INC.'lib/images/interwiki/'.$iw.'.gif')){
+ echo "a.iw_$class {";
+ echo ' background-image: url('.DOKU_MEDIA.'lib/images/interwiki/'.$iw.'.gif)';
+ echo '}';
+ }
+ }
+}
+
+/**
+ * Prints classes for file download links
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function css_filetypes(){
+
+ // default style
+ echo 'a.mediafile {';
+ echo ' background: transparent url('.DOKU_MEDIA.'lib/images/fileicons/file.png) 0px 1px no-repeat;';
+ echo ' padding-left: 18px;';
+ echo ' padding-bottom: 1px;';
+ echo '}';
+
+ // additional styles when icon available
+ // scan directory for all icons
+ $exts = array();
+ if($dh = opendir(DOKU_INC.'lib/images/fileicons')){
+ while(false !== ($file = readdir($dh))){
+ if(preg_match('/([_\-a-z0-9]+(?:\.[_\-a-z0-9]+)*?)\.(png|gif)/i',$file,$match)){
+ $ext = strtolower($match[1]);
+ $type = '.'.strtolower($match[2]);
+ if($ext!='file' && (!isset($exts[$ext]) || $type=='.png')){
+ $exts[$ext] = $type;
+ }
+ }
+ }
+ closedir($dh);
+ }
+ foreach($exts as $ext=>$type){
+ $class = preg_replace('/[^_\-a-z0-9]+/','_',$ext);
+ echo "a.mf_$class {";
+ echo ' background-image: url('.DOKU_MEDIA.'lib/images/fileicons/'.$ext.$type.')';
+ echo '}';
+ }
+}
+
+/**
+ * Loads a given file and fixes relative URLs with the
+ * given location prefix
+ */
+function css_loadfile($file,$location=''){
+ if(!@file_exists($file)) return '';
+ $css = io_readFile($file);
+ if(!$location) return $css;
+
+ $css = preg_replace('#(url\([ \'"]*)((?!/|http://|https://| |\'|"))#','\\1'.$location.'\\3',$css);
+ return $css;
+}
+
+
+/**
+ * Returns a list of possible Plugin Styles (no existance check here)
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function css_pluginstyles($mode='screen'){
+ global $lang;
+ $list = array();
+ $plugins = plugin_list();
+ foreach ($plugins as $p){
+ if($mode == 'all'){
+ $list[DOKU_PLUGIN."$p/all.css"] = DOKU_BASE."lib/plugins/$p/";
+ }elseif($mode == 'print'){
+ $list[DOKU_PLUGIN."$p/print.css"] = DOKU_BASE."lib/plugins/$p/";
+ }elseif($mode == 'feed'){
+ $list[DOKU_PLUGIN."$p/feed.css"] = DOKU_BASE."lib/plugins/$p/";
+ }else{
+ $list[DOKU_PLUGIN."$p/style.css"] = DOKU_BASE."lib/plugins/$p/";
+ $list[DOKU_PLUGIN."$p/screen.css"] = DOKU_BASE."lib/plugins/$p/";
+ }
+ if($lang['direction'] == 'rtl'){
+ $list[DOKU_PLUGIN."$p/rtl.css"] = DOKU_BASE."lib/plugins/$p/";
+ }
+ }
+ return $list;
+}
+
+/**
+ * Very simple CSS optimizer
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function css_compress($css){
+ //strip comments through a callback
+ $css = preg_replace_callback('#(/\*)(.*?)(\*/)#s','css_comment_cb',$css);
+
+ //strip (incorrect but common) one line comments
+ $css = preg_replace('/(?<!:)\/\/.*$/m','',$css);
+
+ // strip whitespaces
+ $css = preg_replace('![\r\n\t ]+!',' ',$css);
+ $css = preg_replace('/ ?([:;,{}\/]) ?/','\\1',$css);
+
+ // shorten colors
+ $css = preg_replace("/#([0-9a-fA-F]{1})\\1([0-9a-fA-F]{1})\\2([0-9a-fA-F]{1})\\3/", "#\\1\\2\\3",$css);
+
+ return $css;
+}
+
+/**
+ * Callback for css_compress()
+ *
+ * Keeps short comments (< 5 chars) to maintain typical browser hacks
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function css_comment_cb($matches){
+ if(strlen($matches[2]) > 4) return '';
+ return $matches[0];
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/exe/detail.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/detail.php
new file mode 100644
index 000000000..f30e039d4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/detail.php
@@ -0,0 +1,58 @@
+<?php
+ if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
+ define('DOKU_MEDIADETAIL',1);
+ require_once(DOKU_INC.'inc/init.php');
+ require_once(DOKU_INC.'inc/common.php');
+ require_once(DOKU_INC.'inc/lang/en/lang.php');
+ require_once(DOKU_INC.'inc/lang/'.$conf['lang'].'/lang.php');
+ require_once(DOKU_INC.'inc/JpegMeta.php');
+ require_once(DOKU_INC.'inc/html.php');
+ require_once(DOKU_INC.'inc/template.php');
+ require_once(DOKU_INC.'inc/auth.php');
+ //close session
+ session_write_close();
+
+ $IMG = getID('media');
+ $ID = cleanID($_REQUEST['id']);
+
+ if($conf['allowdebug'] && $_REQUEST['debug']){
+ print '<pre>';
+ foreach(explode(' ','basedir userewrite baseurl useslash') as $x){
+ print '$'."conf['$x'] = '".$conf[$x]."';\n";
+ }
+ foreach(explode(' ','DOCUMENT_ROOT HTTP_HOST SCRIPT_FILENAME PHP_SELF '.
+ 'REQUEST_URI SCRIPT_NAME PATH_INFO PATH_TRANSLATED') as $x){
+ print '$'."_SERVER['$x'] = '".$_SERVER[$x]."';\n";
+ }
+ print "getID('media'): ".getID('media')."\n";
+ print "getID('media',false): ".getID('media',false)."\n";
+ print '</pre>';
+ }
+
+ $ERROR = false;
+ // check image permissions
+ $AUTH = auth_quickaclcheck($IMG);
+ if($AUTH >= AUTH_READ){
+ // check if image exists
+ $SRC = mediaFN($IMG);
+ if(!@file_exists($SRC)){
+ //doesn't exist!
+
+ }
+ }else{
+ // no auth
+ $ERROR = p_locale_xhtml('denied');
+ }
+
+ /*if(!$ERROR){
+ // load EXIF/IPTC/image details
+ $INFO = array();
+ $INFO['std']['']
+ imagesize
+ }*/
+
+
+ //start output and load template
+ header('Content-Type: text/html; charset=utf-8');
+ include(template('detail.php'));
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/exe/fetch.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/fetch.php
new file mode 100644
index 000000000..11877ef36
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/fetch.php
@@ -0,0 +1,173 @@
+<?php
+/**
+ * DokuWiki media passthrough file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+ if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
+ define('DOKU_DISABLE_GZIP_OUTPUT', 1);
+ require_once(DOKU_INC.'inc/init.php');
+ require_once(DOKU_INC.'inc/common.php');
+ require_once(DOKU_INC.'inc/media.php');
+ require_once(DOKU_INC.'inc/pageutils.php');
+ require_once(DOKU_INC.'inc/httputils.php');
+ require_once(DOKU_INC.'inc/confutils.php');
+ require_once(DOKU_INC.'inc/auth.php');
+
+ //close sesseion
+ session_write_close();
+
+ $mimetypes = getMimeTypes();
+
+ //get input
+ $MEDIA = stripctl(getID('media',false)); // no cleaning except control chars - maybe external
+ $CACHE = calc_cache($_REQUEST['cache']);
+ $WIDTH = (int) $_REQUEST['w'];
+ $HEIGHT = (int) $_REQUEST['h'];
+ list($EXT,$MIME,$DL) = mimetype($MEDIA,false);
+ if($EXT === false){
+ $EXT = 'unknown';
+ $MIME = 'application/octet-stream';
+ $DL = true;
+ }
+
+ //media to local file
+ if(preg_match('#^(https?)://#i',$MEDIA)){
+ //check hash
+ if(substr(md5(auth_cookiesalt().$MEDIA),0,6) != $_REQUEST['hash']){
+ header("HTTP/1.0 412 Precondition Failed");
+ print 'Precondition Failed';
+ exit;
+ }
+ //handle external images
+ if(strncmp($MIME,'image/',6) == 0) $FILE = media_get_from_URL($MEDIA,$EXT,$CACHE);
+ if(!$FILE){
+ //download failed - redirect to original URL
+ header('Location: '.$MEDIA);
+ exit;
+ }
+ }else{
+ $MEDIA = cleanID($MEDIA);
+ if(empty($MEDIA)){
+ header("HTTP/1.0 400 Bad Request");
+ print 'Bad request';
+ exit;
+ }
+
+ //check permissions (namespace only)
+ if(auth_quickaclcheck(getNS($MEDIA).':X') < AUTH_READ){
+ header("HTTP/1.0 401 Unauthorized");
+ //fixme add some image for imagefiles
+ print 'Unauthorized';
+ exit;
+ }
+ $FILE = mediaFN($MEDIA);
+ }
+
+ //check file existance
+ if(!@file_exists($FILE)){
+ header("HTTP/1.0 404 Not Found");
+ //FIXME add some default broken image
+ print 'Not Found';
+ exit;
+ }
+
+ $ORIG = $FILE;
+
+ //handle image resizing/cropping
+ if((substr($MIME,0,5) == 'image') && $WIDTH){
+ if($HEIGHT){
+ $FILE = media_crop_image($FILE,$EXT,$WIDTH,$HEIGHT);
+ }else{
+ $FILE = media_resize_image($FILE,$EXT,$WIDTH,$HEIGHT);
+ }
+ }
+
+ // finally send the file to the client
+ $data = array('file' => $FILE,
+ 'mime' => $MIME,
+ 'download' => $DL,
+ 'cache' => $CACHE,
+ 'orig' => $ORIG,
+ 'ext' => $EXT,
+ 'width' => $WIDTH,
+ 'height' => $HEIGHT);
+
+ $evt = new Doku_Event('MEDIA_SENDFILE', $data);
+ if ($evt->advise_before()) {
+ sendFile($data['file'],$data['mime'],$data['download'],$data['cache']);
+ }
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * Set headers and send the file to the client
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function sendFile($file,$mime,$dl,$cache){
+ global $conf;
+ $fmtime = @filemtime($file);
+ // send headers
+ header("Content-Type: $mime");
+ // smart http caching headers
+ if ($cache==-1) {
+ // cache
+ // cachetime or one hour
+ header('Expires: '.gmdate("D, d M Y H:i:s", time()+max($conf['cachetime'], 3600)).' GMT');
+ header('Cache-Control: public, proxy-revalidate, no-transform, max-age='.max($conf['cachetime'], 3600));
+ header('Pragma: public');
+ } else if ($cache>0) {
+ // recache
+ // remaining cachetime + 10 seconds so the newly recached media is used
+ header('Expires: '.gmdate("D, d M Y H:i:s", $fmtime+$conf['cachetime']+10).' GMT');
+ header('Cache-Control: public, proxy-revalidate, no-transform, max-age='.max($fmtime-time()+$conf['cachetime']+10, 0));
+ header('Pragma: public');
+ } else if ($cache==0) {
+ // nocache
+ header('Cache-Control: must-revalidate, no-transform, post-check=0, pre-check=0');
+ header('Pragma: public');
+ }
+ //send important headers first, script stops here if '304 Not Modified' response
+ http_conditionalRequest($fmtime);
+
+
+ //download or display?
+ if($dl){
+ header('Content-Disposition: attachment; filename="'.basename($file).'";');
+ }else{
+ header('Content-Disposition: inline; filename="'.basename($file).'";');
+ }
+
+ //use x-sendfile header to pass the delivery to compatible webservers
+ if (http_sendfile($file)) exit;
+
+ // send file contents
+ $fp = @fopen($file,"rb");
+ if($fp){
+ http_rangeRequest($fp,filesize($file),$mime);
+ }else{
+ header("HTTP/1.0 500 Internal Server Error");
+ print "Could not read $file - bad permissions?";
+ }
+}
+
+/**
+ * Returns the wanted cachetime in seconds
+ *
+ * Resolves named constants
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function calc_cache($cache){
+ global $conf;
+
+ if(strtolower($cache) == 'nocache') return 0; //never cache
+ if(strtolower($cache) == 'recache') return $conf['cachetime']; //use standard cache
+ return -1; //cache endless
+}
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/exe/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/exe/index.html
new file mode 100644
index 000000000..d614603ac
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/index.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="refresh" content="0; URL=../../" />
+<meta name="robots" content="noindex" />
+<title>nothing here...</title>
+</head>
+<body>
+<!-- this is just here to prevent directory browsing -->
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/exe/indexer.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/indexer.php
new file mode 100644
index 000000000..872f6b5be
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/indexer.php
@@ -0,0 +1,375 @@
+<?php
+/**
+ * DokuWiki indexer
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
+define('DOKU_DISABLE_GZIP_OUTPUT',1);
+require_once(DOKU_INC.'inc/init.php');
+require_once(DOKU_INC.'inc/auth.php');
+require_once(DOKU_INC.'inc/events.php');
+session_write_close(); //close session
+if(!defined('NL')) define('NL',"\n");
+global $ID;
+// Version tag used to force rebuild on upgrade
+define('INDEXER_VERSION', 2);
+
+// keep running after browser closes connection
+@ignore_user_abort(true);
+
+// check if user abort worked, if yes send output early
+$defer = !@ignore_user_abort() || $conf['broken_iua'];
+if(!$defer){
+ sendGIF(); // send gif
+}
+
+$ID = cleanID($_REQUEST['id']);
+
+// Catch any possible output (e.g. errors)
+if(!isset($_REQUEST['debug'])) ob_start();
+
+// run one of the jobs
+$tmp = array(); // No event data
+$evt = new Doku_Event('INDEXER_TASKS_RUN', $tmp);
+if ($evt->advise_before()) {
+ runIndexer() or
+ metaUpdate() or
+ runSitemapper() or
+ runTrimRecentChanges() or
+ runTrimRecentChanges(true) or
+ $evt->advise_after();
+}
+if($defer) sendGIF();
+
+if(!isset($_REQUEST['debug'])) ob_end_clean();
+exit;
+
+// --------------------------------------------------------------------
+
+/**
+ * Trims the recent changes cache (or imports the old changelog) as needed.
+ *
+ * @param media_changes If the media changelog shall be trimmed instead of
+ * the page changelog
+ *
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function runTrimRecentChanges($media_changes = false) {
+ global $conf;
+
+ $fn = ($media_changes ? $conf['media_changelog'] : $conf['changelog']);
+
+ // Trim the Recent Changes
+ // Trims the recent changes cache to the last $conf['changes_days'] recent
+ // changes or $conf['recent'] items, which ever is larger.
+ // The trimming is only done once a day.
+ if (@file_exists($fn) &&
+ (@filemtime($fn.'.trimmed')+86400)<time() &&
+ !@file_exists($fn.'_tmp')) {
+ @touch($fn.'.trimmed');
+ io_lock($fn);
+ $lines = file($fn);
+ if (count($lines)<=$conf['recent']) {
+ // nothing to trim
+ io_unlock($fn);
+ return false;
+ }
+
+ io_saveFile($fn.'_tmp', ''); // presave tmp as 2nd lock
+ $trim_time = time() - $conf['recent_days']*86400;
+ $out_lines = array();
+
+ for ($i=0; $i<count($lines); $i++) {
+ $log = parseChangelogLine($lines[$i]);
+ if ($log === false) continue; // discard junk
+ if ($log['date'] < $trim_time) {
+ $old_lines[$log['date'].".$i"] = $lines[$i]; // keep old lines for now (append .$i to prevent key collisions)
+ } else {
+ $out_lines[$log['date'].".$i"] = $lines[$i]; // definitely keep these lines
+ }
+ }
+
+ if (count($lines)==count($out_lines)) {
+ // nothing to trim
+ @unlink($fn.'_tmp');
+ io_unlock($fn);
+ return false;
+ }
+
+ // sort the final result, it shouldn't be necessary,
+ // however the extra robustness in making the changelog cache self-correcting is worth it
+ ksort($out_lines);
+ $extra = $conf['recent'] - count($out_lines); // do we need extra lines do bring us up to minimum
+ if ($extra > 0) {
+ ksort($old_lines);
+ $out_lines = array_merge(array_slice($old_lines,-$extra),$out_lines);
+ }
+
+ // save trimmed changelog
+ io_saveFile($fn.'_tmp', implode('', $out_lines));
+ @unlink($fn);
+ if (!rename($fn.'_tmp', $fn)) {
+ // rename failed so try another way...
+ io_unlock($fn);
+ io_saveFile($fn, implode('', $out_lines));
+ @unlink($fn.'_tmp');
+ } else {
+ io_unlock($fn);
+ }
+ return true;
+ }
+
+ // nothing done
+ return false;
+}
+
+/**
+ * Runs the indexer for the current page
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function runIndexer(){
+ global $ID;
+ global $conf;
+ print "runIndexer(): started".NL;
+
+ // Move index files (if needed)
+ // Uses the importoldindex plugin to upgrade the index automatically.
+ // FIXME: Remove this from runIndexer when it is no longer needed.
+ if (@file_exists($conf['cachedir'].'/page.idx') &&
+ (!@file_exists($conf['indexdir'].'/page.idx') ||
+ !filesize($conf['indexdir'].'/page.idx')) &&
+ !@file_exists($conf['indexdir'].'/index_importing')) {
+ echo "trigger TEMPORARY_INDEX_UPGRADE_EVENT\n";
+ $tmp = array(); // no event data
+ trigger_event('TEMPORARY_INDEX_UPGRADE_EVENT', $tmp);
+ }
+
+ if(!$ID) return false;
+
+ // check if indexing needed
+ $idxtag = metaFN($ID,'.indexed');
+ if(@file_exists($idxtag)){
+ if(io_readFile($idxtag) >= INDEXER_VERSION){
+ $last = @filemtime($idxtag);
+ if($last > @filemtime(wikiFN($ID))){
+ print "runIndexer(): index for $ID up to date".NL;
+ return false;
+ }
+ }
+ }
+
+ // try to aquire a lock
+ $lock = $conf['lockdir'].'/_indexer.lock';
+ while(!@mkdir($lock,$conf['dmode'])){
+ usleep(50);
+ if(time()-@filemtime($lock) > 60*5){
+ // looks like a stale lock - remove it
+ @rmdir($lock);
+ print "runIndexer(): stale lock removed".NL;
+ }else{
+ print "runIndexer(): indexer locked".NL;
+ return false;
+ }
+ }
+ if($conf['dperm']) chmod($lock, $conf['dperm']);
+
+ require_once(DOKU_INC.'inc/indexer.php');
+
+ // upgrade to version 2
+ if (!@file_exists($conf['indexdir'].'/pageword.idx'))
+ idx_upgradePageWords();
+
+ // do the work
+ idx_addPage($ID);
+
+ // we're finished - save and free lock
+ io_saveFile(metaFN($ID,'.indexed'),INDEXER_VERSION);
+ @rmdir($lock);
+ print "runIndexer(): finished".NL;
+ return true;
+}
+
+/**
+ * Will render the metadata for the page if not exists yet
+ *
+ * This makes sure pages which are created from outside DokuWiki will
+ * gain their data when viewed for the first time.
+ */
+function metaUpdate(){
+ global $ID;
+ print "metaUpdate(): started".NL;
+
+ if(!$ID) return false;
+ $file = metaFN($ID, '.meta');
+ echo "meta file: $file".NL;
+
+ // rendering needed?
+ if (@file_exists($file)) return false;
+ if (!@file_exists(wikiFN($ID))) return false;
+
+ require_once(DOKU_INC.'inc/common.php');
+ require_once(DOKU_INC.'inc/parserutils.php');
+ global $conf;
+
+
+ // gather some additional info from changelog
+ $info = io_grep($conf['changelog'],
+ '/^(\d+)\t(\d+\.\d+\.\d+\.\d+)\t'.preg_quote($ID,'/').'\t([^\t]+)\t([^\t\n]+)/',
+ 0,true);
+
+ $meta = array();
+ if(!empty($info)){
+ $meta['date']['created'] = $info[0][1];
+ foreach($info as $item){
+ if($item[4] != '*'){
+ $meta['date']['modified'] = $item[1];
+ if($item[3]){
+ $meta['contributor'][$item[3]] = $item[3];
+ }
+ }
+ }
+ }
+
+ $meta = p_render_metadata($ID, $meta);
+ io_saveFile($file, serialize($meta));
+
+ echo "metaUpdate(): finished".NL;
+ return true;
+}
+
+/**
+ * Builds a Google Sitemap of all public pages known to the indexer
+ *
+ * The map is placed in the root directory named sitemap.xml.gz - This
+ * file needs to be writable!
+ *
+ * @author Andreas Gohr
+ * @link https://www.google.com/webmasters/sitemaps/docs/en/about.html
+ */
+function runSitemapper(){
+ global $conf;
+ print "runSitemapper(): started".NL;
+ if(!$conf['sitemap']) return false;
+
+ if($conf['compression'] == 'bz2' || $conf['compression'] == 'gz'){
+ $sitemap = 'sitemap.xml.gz';
+ }else{
+ $sitemap = 'sitemap.xml';
+ }
+ print "runSitemapper(): using $sitemap".NL;
+
+ if(@file_exists(DOKU_INC.$sitemap)){
+ if(!is_writable(DOKU_INC.$sitemap)) return false;
+ }else{
+ if(!is_writable(DOKU_INC)) return false;
+ }
+
+ if(@filesize(DOKU_INC.$sitemap) &&
+ @filemtime(DOKU_INC.$sitemap) > (time()-($conf['sitemap']*60*60*24))){
+ print 'runSitemapper(): Sitemap up to date'.NL;
+ return false;
+ }
+
+ $pages = file($conf['indexdir'].'/page.idx');
+ print 'runSitemapper(): creating sitemap using '.count($pages).' pages'.NL;
+
+ // build the sitemap
+ ob_start();
+ print '<?xml version="1.0" encoding="UTF-8"?>'.NL;
+ print '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'.NL;
+ foreach($pages as $id){
+ $id = trim($id);
+ $file = wikiFN($id);
+
+ //skip hidden, non existing and restricted files
+ if(isHiddenPage($id)) continue;
+ $date = @filemtime($file);
+ if(!$date) continue;
+ if(auth_aclcheck($id,'','') < AUTH_READ) continue;
+
+ print ' <url>'.NL;
+ print ' <loc>'.wl($id,'',true).'</loc>'.NL;
+ print ' <lastmod>'.date_iso8601($date).'</lastmod>'.NL;
+ print ' </url>'.NL;
+ }
+ print '</urlset>'.NL;
+ $data = ob_get_contents();
+ ob_end_clean();
+
+ //save the new sitemap
+ io_saveFile(DOKU_INC.$sitemap,$data);
+
+ //ping search engines...
+ $http = new DokuHTTPClient();
+ $http->timeout = 8;
+
+ //ping google
+ print 'runSitemapper(): pinging google'.NL;
+ $url = 'http://www.google.com/webmasters/sitemaps/ping?sitemap=';
+ $url .= urlencode(DOKU_URL.$sitemap);
+ $resp = $http->get($url);
+ if($http->error) print 'runSitemapper(): '.$http->error.NL;
+ print 'runSitemapper(): '.preg_replace('/[\n\r]/',' ',strip_tags($resp)).NL;
+
+ //ping yahoo
+ print 'runSitemapper(): pinging yahoo'.NL;
+ $url = 'http://search.yahooapis.com/SiteExplorerService/V1/updateNotification?appid=dokuwiki&url=';
+ $url .= urlencode(DOKU_URL.$sitemap);
+ $resp = $http->get($url);
+ if($http->error) print 'runSitemapper(): '.$http->error.NL;
+ print 'runSitemapper(): '.preg_replace('/[\n\r]/',' ',strip_tags($resp)).NL;
+
+ //ping microsoft
+ print 'runSitemapper(): pinging microsoft'.NL;
+ $url = 'http://www.bing.com/webmaster/ping.aspx?siteMap=';
+ $url .= urlencode(DOKU_URL.$sitemap);
+ $resp = $http->get($url);
+ if($http->error) print 'runSitemapper(): '.$http->error.NL;
+ print 'runSitemapper(): '.preg_replace('/[\n\r]/',' ',strip_tags($resp)).NL;
+
+ print 'runSitemapper(): finished'.NL;
+ return true;
+}
+
+/**
+ * Formats a timestamp as ISO 8601 date
+ *
+ * @author <ungu at terong dot com>
+ * @link http://www.php.net/manual/en/function.date.php#54072
+ */
+function date_iso8601($int_date) {
+ //$int_date: current date in UNIX timestamp
+ $date_mod = date('Y-m-d\TH:i:s', $int_date);
+ $pre_timezone = date('O', $int_date);
+ $time_zone = substr($pre_timezone, 0, 3).":".substr($pre_timezone, 3, 2);
+ $date_mod .= $time_zone;
+ return $date_mod;
+}
+
+/**
+ * Just send a 1x1 pixel blank gif to the browser
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Harry Fuecks <fuecks@gmail.com>
+ */
+function sendGIF(){
+ if(isset($_REQUEST['debug'])){
+ header('Content-Type: text/plain');
+ return;
+ }
+ $img = base64_decode('R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAEALAAAAAABAAEAAAIBTAA7');
+ header('Content-Type: image/gif');
+ header('Content-Length: '.strlen($img));
+ header('Connection: Close');
+ print $img;
+ flush();
+ // Browser should drop connection after this
+ // Thinks it's got the whole image
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
+// No trailing PHP closing tag - no output please!
+// See Note at http://www.php.net/manual/en/language.basic-syntax.instruction-separation.php
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/exe/js.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/js.php
new file mode 100644
index 000000000..cb1016231
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/js.php
@@ -0,0 +1,397 @@
+<?php
+/**
+ * DokuWiki JavaScript creator
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
+if(!defined('NOSESSION')) define('NOSESSION',true); // we do not use a session or authentication here (better caching)
+if(!defined('NL')) define('NL',"\n");
+if(!defined('DOKU_DISABLE_GZIP_OUTPUT')) define('DOKU_DISABLE_GZIP_OUTPUT',1); // we gzip ourself here
+require_once(DOKU_INC.'inc/init.php');
+require_once(DOKU_INC.'inc/pageutils.php');
+require_once(DOKU_INC.'inc/httputils.php');
+require_once(DOKU_INC.'inc/io.php');
+require_once(DOKU_INC.'inc/JSON.php');
+
+// Main (don't run when UNIT test)
+if(!defined('SIMPLE_TEST')){
+ header('Content-Type: text/javascript; charset=utf-8');
+ js_out();
+}
+
+
+// ---------------------- functions ------------------------------
+
+/**
+ * Output all needed JavaScript
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function js_out(){
+ global $conf;
+ global $lang;
+
+ // The generated script depends on some dynamic options
+ $cache = getCacheName('scripts'.$_SERVER['HTTP_HOST'].$_SERVER['SERVER_PORT'],'.js');
+
+ // array of core files
+ $files = array(
+ DOKU_INC.'lib/scripts/helpers.js',
+ DOKU_INC.'lib/scripts/events.js',
+ DOKU_INC.'lib/scripts/cookie.js',
+ DOKU_INC.'lib/scripts/script.js',
+ DOKU_INC.'lib/scripts/tw-sack.js',
+ DOKU_INC.'lib/scripts/ajax.js',
+ DOKU_INC.'lib/scripts/index.js',
+ DOKU_INC.'lib/scripts/drag.js',
+ DOKU_INC.'lib/scripts/textselection.js',
+ DOKU_INC.'lib/scripts/toolbar.js',
+ DOKU_INC.'lib/scripts/edit.js',
+ DOKU_INC.'lib/scripts/linkwiz.js',
+ DOKU_INC.'lib/scripts/media.js',
+ DOKU_TPLINC.'script.js',
+ );
+
+ // add possible plugin scripts and userscript
+ $files = array_merge($files,js_pluginscripts());
+ $files[] = DOKU_CONF.'userscript.js';
+
+ // check cache age & handle conditional request
+ header('Cache-Control: public, max-age=3600');
+ header('Pragma: public');
+ if(js_cacheok($cache,$files)){
+ http_conditionalRequest(filemtime($cache));
+ if($conf['allowdebug']) header("X-CacheUsed: $cache");
+
+ // finally send output
+ if ($conf['gzip_output'] && http_gzip_valid($cache)) {
+ header('Vary: Accept-Encoding');
+ header('Content-Encoding: gzip');
+ readfile($cache.".gz");
+ } else {
+ if (!http_sendfile($cache)) readfile($cache);
+ }
+ return;
+ } else {
+ http_conditionalRequest(time());
+ }
+
+ // start output buffering and build the script
+ ob_start();
+
+ // add some global variables
+ print "var DOKU_BASE = '".DOKU_BASE."';";
+ print "var DOKU_MEDIA = '".DOKU_MEDIA."';";
+ print "var DOKU_TPL = '".DOKU_TPL."';";
+ print "var DOKU_UHN = ".((int) useHeading('navigation')).";";
+ print "var DOKU_UHC = ".((int) useHeading('content')).";";
+
+ // load JS specific translations
+ $json = new JSON();
+ $lang['js']['plugins'] = js_pluginstrings();
+ echo 'LANG = '.$json->encode($lang['js']).";\n";
+
+ // load toolbar
+ require_once(DOKU_INC.'inc/toolbar.php');
+ toolbar_JSdefines('toolbar');
+
+ // load files
+ foreach($files as $file){
+ echo "\n\n/* XXXXXXXXXX begin of ".str_replace(DOKU_INC, '', $file) ." XXXXXXXXXX */\n\n";
+ js_load($file);
+ echo "\n\n/* XXXXXXXXXX end of " . str_replace(DOKU_INC, '', $file) . " XXXXXXXXXX */\n\n";
+ }
+
+
+ // init stuff
+ js_runonstart("ajax_qsearch.init('qsearch__in','qsearch__out')");
+ js_runonstart("addEvent(document,'click',closePopups)");
+ js_runonstart('addTocToggle()');
+ js_runonstart("initSizeCtl('size__ctl','wiki__text')");
+ js_runonstart("initToolbar('tool__bar','wiki__text',toolbar)");
+ js_runonstart("initChangeCheck('".js_escape($lang['notsavedyet'])."')");
+ js_runonstart("locktimer.init(".($conf['locktime'] - 60).",'".js_escape($lang['willexpire'])."',".$conf['usedraft'].")");
+ js_runonstart('scrollToMarker()');
+ js_runonstart('focusMarker()');
+
+ // end output buffering and get contents
+ $js = ob_get_contents();
+ ob_end_clean();
+
+ // compress whitespace and comments
+ if($conf['compress']){
+ $js = js_compress($js);
+ }
+
+ $js .= "\n"; // https://bugzilla.mozilla.org/show_bug.cgi?id=316033
+
+ // save cache file
+ io_saveFile($cache,$js);
+ if(function_exists('gzopen')) io_saveFile("$cache.gz",$js);
+
+ // finally send output
+ if ($conf['gzip_output']) {
+ header('Vary: Accept-Encoding');
+ header('Content-Encoding: gzip');
+ print gzencode($js,9,FORCE_GZIP);
+ } else {
+ print $js;
+ }
+}
+
+/**
+ * Load the given file, handle include calls and print it
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function js_load($file){
+ if(!@file_exists($file)) return;
+ static $loaded = array();
+
+ $data = io_readFile($file);
+ while(preg_match('#/\*\s*DOKUWIKI:include(_once)?\s+([\w\./]+)\s*\*/#',$data,$match)){
+ $ifile = $match[2];
+
+ // is it a include_once?
+ if($match[1]){
+ $base = basename($ifile);
+ if($loaded[$base]) continue;
+ $loaded[$base] = true;
+ }
+
+ if($ifile{0} != '/') $ifile = dirname($file).'/'.$ifile;
+
+ if(@file_exists($ifile)){
+ $idata = io_readFile($ifile);
+ }else{
+ $idata = '';
+ }
+ $data = str_replace($match[0],$idata,$data);
+ }
+ echo $data;
+}
+
+/**
+ * Checks if a JavaScript Cache file still is valid
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function js_cacheok($cache,$files){
+ if(isset($_REQUEST['purge'])) return false; //support purge request
+
+ $ctime = @filemtime($cache);
+ if(!$ctime) return false; //There is no cache
+
+ // some additional files to check
+ $files = array_merge($files, getConfigFiles('main'));
+ $files[] = DOKU_CONF.'userscript.js';
+ $files[] = __FILE__;
+
+ // now walk the files
+ foreach($files as $file){
+ if(@filemtime($file) > $ctime){
+ return false;
+ }
+ }
+ return true;
+}
+
+/**
+ * Returns a list of possible Plugin Scripts (no existance check here)
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function js_pluginscripts(){
+ $list = array();
+ $plugins = plugin_list();
+ foreach ($plugins as $p){
+ $list[] = DOKU_PLUGIN."$p/script.js";
+ }
+ return $list;
+}
+
+/**
+ * Return an two-dimensional array with strings from the language file of each plugin.
+ *
+ * - $lang['js'] must be an array.
+ * - Nothing is returned for plugins without an entry for $lang['js']
+ *
+ * @author Gabriel Birke <birke@d-scribe.de>
+ */
+function js_pluginstrings()
+{
+ global $conf;
+ $pluginstrings = array();
+ $plugins = plugin_list();
+ foreach ($plugins as $p){
+ if (isset($lang)) unset($lang);
+ if (@file_exists(DOKU_PLUGIN."$p/lang/en/lang.php")) {
+ include DOKU_PLUGIN."$p/lang/en/lang.php";
+ }
+ if (isset($conf['lang']) && $conf['lang']!='en' && @file_exists(DOKU_PLUGIN."$p/lang/".$conf['lang']."/lang.php")) {
+ include DOKU_PLUGIN."$p/lang/".$conf['lang']."/lang.php";
+ }
+ if (isset($lang['js'])) {
+ $pluginstrings[$p] = $lang['js'];
+ }
+ }
+ return $pluginstrings;
+}
+
+/**
+ * Escapes a String to be embedded in a JavaScript call, keeps \n
+ * as newline
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function js_escape($string){
+ return str_replace('\\\\n','\\n',addslashes($string));
+}
+
+/**
+ * Adds the given JavaScript code to the window.onload() event
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function js_runonstart($func){
+ echo "addInitEvent(function(){ $func; });".NL;
+}
+
+/**
+ * Strip comments and whitespaces from given JavaScript Code
+ *
+ * This is a port of Nick Galbreath's python tool jsstrip.py which is
+ * released under BSD license. See link for original code.
+ *
+ * @author Nick Galbreath <nickg@modp.com>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @link http://code.google.com/p/jsstrip/
+ */
+function js_compress($s){
+ $s = ltrim($s); // strip all initial whitespace
+ $s .= "\n";
+ $i = 0; // char index for input string
+ $j = 0; // char forward index for input string
+ $line = 0; // line number of file (close to it anyways)
+ $slen = strlen($s); // size of input string
+ $lch = ''; // last char added
+ $result = ''; // we store the final result here
+
+ // items that don't need spaces next to them
+ $chars = "^&|!+\-*\/%=\?:;,{}()<>% \t\n\r'\"[]";
+
+ $regex_starters = array("(", "=", "[", "," , ":");
+
+ $whitespaces_chars = array(" ", "\t", "\n", "\r", "\0", "\x0B");
+
+ while($i < $slen){
+ // skip all "boring" characters. This is either
+ // reserved word (e.g. "for", "else", "if") or a
+ // variable/object/method (e.g. "foo.color")
+ while ($i < $slen && (strpos($chars,$s[$i]) === false) ){
+ $result .= $s{$i};
+ $i = $i + 1;
+ }
+
+ $ch = $s{$i};
+ // multiline comments (keeping IE conditionals)
+ if($ch == '/' && $s{$i+1} == '*' && $s{$i+2} != '@'){
+ $endC = strpos($s,'*/',$i+2);
+ if($endC === false) trigger_error('Found invalid /*..*/ comment', E_USER_ERROR);
+ $i = $endC + 2;
+ continue;
+ }
+
+ // singleline
+ if($ch == '/' && $s{$i+1} == '/'){
+ $endC = strpos($s,"\n",$i+2);
+ if($endC === false) trigger_error('Invalid comment', E_USER_ERROR);
+ $i = $endC;
+ continue;
+ }
+
+ // tricky. might be an RE
+ if($ch == '/'){
+ // rewind, skip white space
+ $j = 1;
+ while(in_array($s{$i-$j}, $whitespaces_chars)){
+ $j = $j + 1;
+ }
+ if( in_array($s{$i-$j}, $regex_starters) ){
+ // yes, this is an re
+ // now move forward and find the end of it
+ $j = 1;
+ while($s{$i+$j} != '/'){
+ while( ($s{$i+$j} != '\\') && ($s{$i+$j} != '/')){
+ $j = $j + 1;
+ }
+ if($s{$i+$j} == '\\') $j = $j + 2;
+ }
+ $result .= substr($s,$i,$j+1);
+ $i = $i + $j + 1;
+ continue;
+ }
+ }
+
+ // double quote strings
+ if($ch == '"'){
+ $j = 1;
+ while( $s{$i+$j} != '"' && ($i+$j < $slen)){
+ if( $s{$i+$j} == '\\' && ($s{$i+$j+1} == '"' || $s{$i+$j+1} == '\\') ){
+ $j += 2;
+ }else{
+ $j += 1;
+ }
+ }
+ $result .= substr($s,$i,$j+1);
+ $i = $i + $j + 1;
+ continue;
+ }
+
+ // single quote strings
+ if($ch == "'"){
+ $j = 1;
+ while( $s{$i+$j} != "'" && ($i+$j < $slen)){
+ if( $s{$i+$j} == '\\' && ($s{$i+$j+1} == "'" || $s{$i+$j+1} == '\\') ){
+ $j += 2;
+ }else{
+ $j += 1;
+ }
+ }
+ $result .= substr($s,$i,$j+1);
+ $i = $i + $j + 1;
+ continue;
+ }
+
+ // whitespaces
+ if( $ch == ' ' || $ch == "\r" || $ch == "\n" || $ch == "\t" ){
+ // leading spaces
+ if($i+1 < $slen && (strpos($chars,$s[$i+1]) !== false)){
+ $i = $i + 1;
+ continue;
+ }
+ // trailing spaces
+ // if this ch is space AND the last char processed
+ // is special, then skip the space
+ $lch = substr($result,-1);
+ if($lch && (strpos($chars,$lch) !== false)){
+ $i = $i + 1;
+ continue;
+ }
+ // else after all of this convert the "whitespace" to
+ // a single space. It will get appended below
+ $ch = ' ';
+ }
+
+ // other chars
+ $result .= $ch;
+ $i = $i + 1;
+ }
+
+ return trim($result);
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/exe/mediamanager.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/mediamanager.php
new file mode 100644
index 000000000..f6e91b858
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/mediamanager.php
@@ -0,0 +1,105 @@
+<?php
+ if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
+ define('DOKU_MEDIAMANAGER',1);
+
+ // for multi uploader:
+ @ini_set('session.use_only_cookies',0);
+
+ require_once(DOKU_INC.'inc/init.php');
+ require_once(DOKU_INC.'inc/lang/en/lang.php');
+ require_once(DOKU_INC.'inc/lang/'.$conf['lang'].'/lang.php');
+ require_once(DOKU_INC.'inc/media.php');
+ require_once(DOKU_INC.'inc/common.php');
+ require_once(DOKU_INC.'inc/search.php');
+ require_once(DOKU_INC.'inc/template.php');
+ require_once(DOKU_INC.'inc/auth.php');
+
+ trigger_event('MEDIAMANAGER_STARTED',$tmp=array());
+ session_write_close(); //close session
+
+ // handle passed message
+ if($_REQUEST['msg1']) msg(hsc($_REQUEST['msg1']),1);
+ if($_REQUEST['err']) msg(hsc($_REQUEST['err']),-1);
+
+
+ // get namespace to display (either direct or from deletion order)
+ if($_REQUEST['delete']){
+ $DEL = cleanID($_REQUEST['delete']);
+ $IMG = $DEL;
+ $NS = getNS($DEL);
+ }elseif($_REQUEST['edit']){
+ $IMG = cleanID($_REQUEST['edit']);
+ $NS = getNS($IMG);
+ }elseif($_REQUEST['img']){
+ $IMG = cleanID($_REQUEST['img']);
+ $NS = getNS($IMG);
+ }else{
+ $NS = $_REQUEST['ns'];
+ $NS = cleanID($NS);
+ }
+
+ // check auth
+ $AUTH = auth_quickaclcheck("$NS:*");
+
+ // create the given namespace (just for beautification)
+ if($AUTH >= AUTH_UPLOAD) { io_createNamespace("$NS:xxx", 'media'); }
+
+ // handle flash upload
+ if(isset($_FILES['Filedata'])){
+ $_FILES['upload'] =& $_FILES['Filedata'];
+ $JUMPTO = media_upload($NS,$AUTH);
+ if($JUMPTO == false){
+ header("HTTP/1.0 400 Bad Request");
+ echo 'Upload failed';
+ }
+ echo 'ok';
+ exit;
+ }
+
+ // give info on PHP catched upload errors
+ if($_FILES['upload']['error']){
+ switch($_FILES['upload']['error']){
+ case 1:
+ case 2:
+ msg(sprintf($lang['uploadsize'],
+ filesize_h(php_to_byte(ini_get('upload_max_filesize')))),-1);
+ break;
+ default:
+ msg($lang['uploadfail'].' ('.$_FILES['upload']['error'].')',-1);
+ }
+ unset($_FILES['upload']);
+ }
+
+ // handle upload
+ if($_FILES['upload']['tmp_name']){
+ $JUMPTO = media_upload($NS,$AUTH);
+ if($JUMPTO) $NS = getNS($JUMPTO);
+ }
+
+ // handle meta saving
+ if($IMG && $_REQUEST['do']['save']){
+ $JUMPTO = media_metasave($IMG,$AUTH,$_REQUEST['meta']);
+ }
+
+ // handle deletion
+ if($DEL) {
+ $INUSE = media_inuse($DEL);
+ if(!$INUSE) {
+ if(media_delete($DEL,$AUTH)) {
+ msg(sprintf($lang['deletesucc'],noNS($DEL)),1);
+ } else {
+ msg(sprintf($lang['deletefail'],noNS($DEL)),-1);
+ }
+ } else {
+ if(!$conf['refshow']) {
+ unset($INUSE);
+ msg(sprintf($lang['mediainuse'],noNS($DEL)),0);
+ }
+ }
+ }
+
+ // finished - start output
+ header('Content-Type: text/html; charset=utf-8');
+ include(template('mediamanager.php'));
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/exe/multipleUpload.swf b/mod/dokuwiki/vendors/dokuwiki/lib/exe/multipleUpload.swf
new file mode 100644
index 000000000..888aab045
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/multipleUpload.swf
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/exe/opensearch.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/opensearch.php
new file mode 100644
index 000000000..f16b4f681
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/opensearch.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * DokuWiki OpenSearch creator
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @link http://www.opensearch.org/
+ * @author Mike Frysinger <vapier@gentoo.org>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
+if(!defined('NOSESSION')) define('NOSESSION',true); // we do not use a session or authentication here (better caching)
+if(!defined('NL')) define('NL',"\n");
+require_once(DOKU_INC.'inc/init.php');
+
+// try to be clever about the favicon location
+if(file_exists(DOKU_INC.'favicon.ico')){
+ $ico = DOKU_URL.'favicon.ico';
+}elseif(file_exists(DOKU_TPLINC.'images/favicon.ico')){
+ $ico = DOKU_URL.'lib/tpl/'.$conf['template'].'/images/favicon.ico';
+}elseif(file_exists(DOKU_TPLINC.'favicon.ico')){
+ $ico = DOKU_URL.'lib/tpl/'.$conf['template'].'/favicon.ico';
+}else{
+ $ico = DOKU_URL.'lib/tpl/default/images/favicon.ico';
+}
+
+// output
+header('Content-Type: application/opensearchdescription+xml; charset=utf-8');
+echo '<?xml version="1.0"?>'.NL;
+echo '<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">'.NL;
+echo ' <ShortName>'.htmlspecialchars($conf['title']).'</ShortName>'.NL;
+echo ' <Image width="16" height="16" type="image/x-icon">'.$ico.'</Image>'.NL;
+echo ' <Url type="text/html" template="'.DOKU_URL.DOKU_SCRIPT.'?do=search&amp;id={searchTerms}" />'.NL;
+echo ' <Url type="application/x-suggestions+json" template="'.
+ DOKU_URL.'lib/exe/ajax.php?call=suggestions&amp;q={searchTerms}" />'.NL;
+echo '</OpenSearchDescription>'.NL;
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/exe/xmlrpc.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/xmlrpc.php
new file mode 100644
index 000000000..d3913482f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/xmlrpc.php
@@ -0,0 +1,921 @@
+<?php
+if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
+
+// fix when '<?xml' isn't on the very first line
+if(isset($HTTP_RAW_POST_DATA)) $HTTP_RAW_POST_DATA = trim($HTTP_RAW_POST_DATA);
+
+/**
+ * Increased whenever the API is changed
+ */
+define('DOKU_XMLRPC_API_VERSION',2);
+
+require_once(DOKU_INC.'inc/init.php');
+require_once(DOKU_INC.'inc/common.php');
+require_once(DOKU_INC.'inc/auth.php');
+session_write_close(); //close session
+
+if(!$conf['xmlrpc']) die('XML-RPC server not enabled.');
+
+require_once(DOKU_INC.'inc/IXR_Library.php');
+
+
+/**
+ * Contains needed wrapper functions and registers all available
+ * XMLRPC functions.
+ */
+class dokuwiki_xmlrpc_server extends IXR_IntrospectionServer {
+ var $methods = array();
+ var $public_methods = array();
+
+ /**
+ * Checks if the current user is allowed to execute non anonymous methods
+ */
+ function checkAuth(){
+ global $conf;
+ global $USERINFO;
+
+ if(!$conf['useacl']) return true; //no ACL - then no checks
+
+ $allowed = explode(',',$conf['xmlrpcuser']);
+ $allowed = array_map('trim', $allowed);
+ $allowed = array_unique($allowed);
+ $allowed = array_filter($allowed);
+
+ if(!count($allowed)) return true; //no restrictions
+
+ $user = $_SERVER['REMOTE_USER'];
+ $groups = (array) $USERINFO['grps'];
+
+ if(in_array($user,$allowed)) return true; //user explicitly mentioned
+
+ //check group memberships
+ foreach($groups as $group){
+ if(in_array('@'.$group,$allowed)) return true;
+ }
+
+ //still here? no access!
+ return false;
+ }
+
+ /**
+ * Adds a callback, extends parent method
+ *
+ * add another parameter to define if anonymous access to
+ * this method should be granted.
+ */
+ function addCallback($method, $callback, $args, $help, $public=false){
+ if($public) $this->public_methods[] = $method;
+ return parent::addCallback($method, $callback, $args, $help);
+ }
+
+ /**
+ * Execute a call, extends parent method
+ *
+ * Checks for authentication first
+ */
+ function call($methodname, $args){
+ if(!in_array($methodname,$this->public_methods) && !$this->checkAuth()){
+ return new IXR_Error(-32603, 'server error. not authorized to call method "'.$methodname.'".');
+ }
+ return parent::call($methodname, $args);
+ }
+
+ /**
+ * Constructor. Register methods and run Server
+ */
+ function dokuwiki_xmlrpc_server(){
+ $this->IXR_IntrospectionServer();
+
+ /* DokuWiki's own methods */
+ $this->addCallback(
+ 'dokuwiki.getXMLRPCAPIVersion',
+ 'this:getAPIVersion',
+ array('integer'),
+ 'Returns the XMLRPC API version.',
+ true
+ );
+
+ $this->addCallback(
+ 'dokuwiki.getVersion',
+ 'getVersion',
+ array('string'),
+ 'Returns the running DokuWiki version.',
+ true
+ );
+
+ $this->addCallback(
+ 'dokuwiki.login',
+ 'this:login',
+ array('integer','string','string'),
+ 'Tries to login with the given credentials and sets auth cookies.',
+ true
+ );
+
+ $this->addCallback(
+ 'dokuwiki.getPagelist',
+ 'this:readNamespace',
+ array('struct','string','struct'),
+ 'List all pages within the given namespace.'
+ );
+
+ $this->addCallback(
+ 'dokuwiki.getTime',
+ 'time',
+ array('int'),
+ 'Return the current time at the wiki server.'
+ );
+
+ $this->addCallback(
+ 'dokuwiki.setLocks',
+ 'this:setLocks',
+ array('struct','struct'),
+ 'Lock or unlock pages.'
+ );
+
+ /* Wiki API v2 http://www.jspwiki.org/wiki/WikiRPCInterface2 */
+ $this->addCallback(
+ 'wiki.getRPCVersionSupported',
+ 'this:wiki_RPCVersion',
+ array('int'),
+ 'Returns 2 with the supported RPC API version.',
+ true
+ );
+ $this->addCallback(
+ 'wiki.getPage',
+ 'this:rawPage',
+ array('string','string'),
+ 'Get the raw Wiki text of page, latest version.'
+ );
+ $this->addCallback(
+ 'wiki.getPageVersion',
+ 'this:rawPage',
+ array('string','string','int'),
+ 'Get the raw Wiki text of page.'
+ );
+ $this->addCallback(
+ 'wiki.getPageHTML',
+ 'this:htmlPage',
+ array('string','string'),
+ 'Return page in rendered HTML, latest version.'
+ );
+ $this->addCallback(
+ 'wiki.getPageHTMLVersion',
+ 'this:htmlPage',
+ array('string','string','int'),
+ 'Return page in rendered HTML.'
+ );
+ $this->addCallback(
+ 'wiki.getAllPages',
+ 'this:listPages',
+ array('struct'),
+ 'Returns a list of all pages. The result is an array of utf8 pagenames.'
+ );
+ $this->addCallback(
+ 'wiki.getAttachments',
+ 'this:listAttachments',
+ array('struct', 'string', 'struct'),
+ 'Returns a list of all media files.'
+ );
+ $this->addCallback(
+ 'wiki.getBackLinks',
+ 'this:listBackLinks',
+ array('struct','string'),
+ 'Returns the pages that link to this page.'
+ );
+ $this->addCallback(
+ 'wiki.getPageInfo',
+ 'this:pageInfo',
+ array('struct','string'),
+ 'Returns a struct with infos about the page.'
+ );
+ $this->addCallback(
+ 'wiki.getPageInfoVersion',
+ 'this:pageInfo',
+ array('struct','string','int'),
+ 'Returns a struct with infos about the page.'
+ );
+ $this->addCallback(
+ 'wiki.getPageVersions',
+ 'this:pageVersions',
+ array('struct','string','int'),
+ 'Returns the available revisions of the page.'
+ );
+ $this->addCallback(
+ 'wiki.putPage',
+ 'this:putPage',
+ array('int', 'string', 'string', 'struct'),
+ 'Saves a wiki page.'
+ );
+ $this->addCallback(
+ 'wiki.listLinks',
+ 'this:listLinks',
+ array('struct','string'),
+ 'Lists all links contained in a wiki page.'
+ );
+ $this->addCallback(
+ 'wiki.getRecentChanges',
+ 'this:getRecentChanges',
+ array('struct','int'),
+ 'Returns a struct about all recent changes since given timestamp.'
+ );
+ $this->addCallback(
+ 'wiki.getRecentMediaChanges',
+ 'this:getRecentMediaChanges',
+ array('struct','int'),
+ 'Returns a struct about all recent media changes since given timestamp.'
+ );
+ $this->addCallback(
+ 'wiki.aclCheck',
+ 'this:aclCheck',
+ array('int', 'string'),
+ 'Returns the permissions of a given wiki page.'
+ );
+ $this->addCallback(
+ 'wiki.putAttachment',
+ 'this:putAttachment',
+ array('struct', 'string', 'base64', 'struct'),
+ 'Upload a file to the wiki.'
+ );
+ $this->addCallback(
+ 'wiki.deleteAttachment',
+ 'this:deleteAttachment',
+ array('int', 'string'),
+ 'Delete a file from the wiki.'
+ );
+ $this->addCallback(
+ 'wiki.getAttachment',
+ 'this:getAttachment',
+ array('base64', 'string'),
+ 'Download a file from the wiki.'
+ );
+ $this->addCallback(
+ 'wiki.getAttachmentInfo',
+ 'this:getAttachmentInfo',
+ array('struct', 'string'),
+ 'Returns a struct with infos about the attachment.'
+ );
+
+ /**
+ * Trigger XMLRPC_CALLBACK_REGISTER, action plugins can use this event
+ * to extend the XMLRPC interface and register their own callbacks.
+ *
+ * Event data:
+ * The XMLRPC server object:
+ *
+ * $event->data->addCallback() - register a callback, the second
+ * paramter has to be of the form "plugin:<pluginname>:<plugin
+ * method>"
+ *
+ * $event->data->callbacks - an array which holds all awaylable
+ * callbacks
+ */
+ trigger_event('XMLRPC_CALLBACK_REGISTER', $this);
+
+ $this->serve();
+ }
+
+ /**
+ * Return a raw wiki page
+ */
+ function rawPage($id,$rev=''){
+ if(auth_quickaclcheck($id) < AUTH_READ){
+ return new IXR_Error(1, 'You are not allowed to read this page');
+ }
+ $text = rawWiki($id,$rev);
+ if(!$text) {
+ $data = array($id);
+ return trigger_event('HTML_PAGE_FROMTEMPLATE',$data,'pageTemplate',true);
+ } else {
+ return $text;
+ }
+ }
+
+ /**
+ * Return a media file encoded in base64
+ *
+ * @author Gina Haeussge <osd@foosel.net>
+ */
+ function getAttachment($id){
+ $id = cleanID($id);
+ if (auth_quickaclcheck(getNS($id).':*') < AUTH_READ)
+ return new IXR_Error(1, 'You are not allowed to read this file');
+
+ $file = mediaFN($id);
+ if (!@ file_exists($file))
+ return new IXR_Error(1, 'The requested file does not exist');
+
+ $data = io_readFile($file, false);
+ $base64 = base64_encode($data);
+ return $base64;
+ }
+
+ /**
+ * Return info about a media file
+ *
+ * @author Gina Haeussge <osd@foosel.net>
+ */
+ function getAttachmentInfo($id){
+ $id = cleanID($id);
+ $info = array(
+ 'lastModified' => 0,
+ 'size' => 0,
+ );
+
+ $file = mediaFN($id);
+ if ((auth_quickaclcheck(getNS($id).':*') >= AUTH_READ) && file_exists($file)){
+ $info['lastModified'] = new IXR_Date(filemtime($file));
+ $info['size'] = filesize($file);
+ }
+
+ return $info;
+ }
+
+ /**
+ * Return a wiki page rendered to html
+ */
+ function htmlPage($id,$rev=''){
+ if(auth_quickaclcheck($id) < AUTH_READ){
+ return new IXR_Error(1, 'You are not allowed to read this page');
+ }
+ return p_wiki_xhtml($id,$rev,false);
+ }
+
+ /**
+ * List all pages - we use the indexer list here
+ */
+ function listPages(){
+ global $conf;
+
+ $list = array();
+ $pages = file($conf['indexdir'] . '/page.idx');
+ $pages = array_filter($pages, 'isVisiblePage');
+
+ foreach(array_keys($pages) as $idx) {
+ if(page_exists($pages[$idx])) {
+ $perm = auth_quickaclcheck($pages[$idx]);
+ if($perm >= AUTH_READ) {
+ $page = array();
+ $page['id'] = trim($pages[$idx]);
+ $page['perms'] = $perm;
+ $page['size'] = @filesize(wikiFN($pages[$idx]));
+ $page['lastModified'] = new IXR_Date(@filemtime(wikiFN($pages[$idx])));
+ $list[] = $page;
+ }
+ }
+ }
+
+ return $list;
+ }
+
+ /**
+ * List all pages in the given namespace (and below)
+ */
+ function readNamespace($ns,$opts){
+ global $conf;
+
+ if(!is_array($opts)) $opts=array();
+
+ $ns = cleanID($ns);
+ $dir = utf8_encodeFN(str_replace(':', '/', $ns));
+ $data = array();
+ require_once(DOKU_INC.'inc/search.php');
+ $opts['skipacl'] = 0; // no ACL skipping for XMLRPC
+ search($data, $conf['datadir'], 'search_allpages', $opts, $dir);
+ return $data;
+ }
+
+ /**
+ * List all media files.
+ *
+ * Available options are 'recursive' for also including the subnamespaces
+ * in the listing, and 'pattern' for filtering the returned files against
+ * a regular expression matching their name.
+ *
+ * @author Gina Haeussge <osd@foosel.net>
+ */
+ function listAttachments($ns, $options = array()) {
+ global $conf;
+ global $lang;
+
+ $ns = cleanID($ns);
+
+ if (!is_array($options)) $options = array();
+ $options['skipacl'] = 0; // no ACL skipping for XMLRPC
+
+
+ if(auth_quickaclcheck($ns.':*') >= AUTH_READ) {
+ $dir = utf8_encodeFN(str_replace(':', '/', $ns));
+
+ $data = array();
+ require_once(DOKU_INC.'inc/search.php');
+ search($data, $conf['mediadir'], 'search_media', $options, $dir);
+ $len = count($data);
+ if(!$len) return array();
+
+ for($i=0; $i<$len; $i++) {
+ unset($data[$i]['meta']);
+ $data[$i]['lastModified'] = new IXR_Date($data[$i]['mtime']);
+ }
+ return $data;
+ } else {
+ return new IXR_Error(1, 'You are not allowed to list media files.');
+ }
+ }
+
+ /**
+ * Return a list of backlinks
+ */
+ function listBackLinks($id){
+ require_once(DOKU_INC.'inc/fulltext.php');
+ return ft_backlinks($id);
+ }
+
+ /**
+ * Return some basic data about a page
+ */
+ function pageInfo($id,$rev=''){
+ if(auth_quickaclcheck($id) < AUTH_READ){
+ return new IXR_Error(1, 'You are not allowed to read this page');
+ }
+ $file = wikiFN($id,$rev);
+ $time = @filemtime($file);
+ if(!$time){
+ return new IXR_Error(10, 'The requested page does not exist');
+ }
+
+ $info = getRevisionInfo($id, $time, 1024);
+
+ $data = array(
+ 'name' => $id,
+ 'lastModified' => new IXR_Date($time),
+ 'author' => (($info['user']) ? $info['user'] : $info['ip']),
+ 'version' => $time
+ );
+
+ return ($data);
+ }
+
+ /**
+ * Save a wiki page
+ *
+ * @author Michael Klier <chi@chimeric.de>
+ */
+ function putPage($id, $text, $params) {
+ global $TEXT;
+ global $lang;
+ global $conf;
+
+ $id = cleanID($id);
+ $TEXT = cleanText($text);
+ $sum = $params['sum'];
+ $minor = $params['minor'];
+
+ if(empty($id))
+ return new IXR_Error(1, 'Empty page ID');
+
+ if(!page_exists($id) && trim($TEXT) == '' ) {
+ return new IXR_ERROR(1, 'Refusing to write an empty new wiki page');
+ }
+
+ if(auth_quickaclcheck($id) < AUTH_EDIT)
+ return new IXR_Error(1, 'You are not allowed to edit this page');
+
+ // Check, if page is locked
+ if(checklock($id))
+ return new IXR_Error(1, 'The page is currently locked');
+
+ // SPAM check
+ if(checkwordblock())
+ return new IXR_Error(1, 'Positive wordblock check');
+
+ // autoset summary on new pages
+ if(!page_exists($id) && empty($sum)) {
+ $sum = $lang['created'];
+ }
+
+ // autoset summary on deleted pages
+ if(page_exists($id) && empty($TEXT) && empty($sum)) {
+ $sum = $lang['deleted'];
+ }
+
+ lock($id);
+
+ saveWikiText($id,$TEXT,$sum,$minor);
+
+ unlock($id);
+
+ // run the indexer if page wasn't indexed yet
+ if(!@file_exists(metaFN($id, '.indexed'))) {
+ // try to aquire a lock
+ $lock = $conf['lockdir'].'/_indexer.lock';
+ while(!@mkdir($lock,$conf['dmode'])){
+ usleep(50);
+ if(time()-@filemtime($lock) > 60*5){
+ // looks like a stale lock - remove it
+ @rmdir($lock);
+ }else{
+ return false;
+ }
+ }
+ if($conf['dperm']) chmod($lock, $conf['dperm']);
+
+ require_once(DOKU_INC.'inc/indexer.php');
+
+ // do the work
+ idx_addPage($id);
+
+ // we're finished - save and free lock
+ io_saveFile(metaFN($id,'.indexed'),INDEXER_VERSION);
+ @rmdir($lock);
+ }
+
+ return 0;
+ }
+
+ /**
+ * Uploads a file to the wiki.
+ *
+ * Michael Klier <chi@chimeric.de>
+ */
+ function putAttachment($id, $file, $params) {
+ global $conf;
+ global $lang;
+
+ $auth = auth_quickaclcheck(getNS($id).':*');
+ if($auth >= AUTH_UPLOAD) {
+ if(!isset($id)) {
+ return new IXR_ERROR(1, 'Filename not given.');
+ }
+
+ $ftmp = $conf['tmpdir'] . '/' . $id;
+
+ // save temporary file
+ @unlink($ftmp);
+ $buff = base64_decode($file);
+ io_saveFile($ftmp, $buff);
+
+ // get filename
+ list($iext, $imime,$dl) = mimetype($id);
+ $id = cleanID($id);
+ $fn = mediaFN($id);
+
+ // get filetype regexp
+ $types = array_keys(getMimeTypes());
+ $types = array_map(create_function('$q','return preg_quote($q,"/");'),$types);
+ $regex = join('|',$types);
+
+ // because a temp file was created already
+ if(preg_match('/\.('.$regex.')$/i',$fn)) {
+ //check for overwrite
+ $overwrite = @file_exists($fn);
+ if($overwrite && (!$params['ow'] || $auth < AUTH_DELETE)) {
+ return new IXR_ERROR(1, $lang['uploadexist'].'1');
+ }
+ // check for valid content
+ @require_once(DOKU_INC.'inc/media.php');
+ $ok = media_contentcheck($ftmp, $imime);
+ if($ok == -1) {
+ return new IXR_ERROR(1, sprintf($lang['uploadexist'].'2', ".$iext"));
+ } elseif($ok == -2) {
+ return new IXR_ERROR(1, $lang['uploadspam']);
+ } elseif($ok == -3) {
+ return new IXR_ERROR(1, $lang['uploadxss']);
+ }
+
+ // prepare event data
+ $data[0] = $ftmp;
+ $data[1] = $fn;
+ $data[2] = $id;
+ $data[3] = $imime;
+ $data[4] = $overwrite;
+
+ // trigger event
+ require_once(DOKU_INC.'inc/events.php');
+ return trigger_event('MEDIA_UPLOAD_FINISH', $data, array($this, '_media_upload_action'), true);
+
+ } else {
+ return new IXR_ERROR(1, $lang['uploadwrong']);
+ }
+ } else {
+ return new IXR_ERROR(1, "You don't have permissions to upload files.");
+ }
+ }
+
+ /**
+ * Deletes a file from the wiki.
+ *
+ * @author Gina Haeussge <osd@foosel.net>
+ */
+ function deleteAttachment($id){
+ $auth = auth_quickaclcheck(getNS($id).':*');
+ if($auth < AUTH_DELETE) return new IXR_ERROR(1, "You don't have permissions to delete files.");
+ global $conf;
+ global $lang;
+
+ // check for references if needed
+ $mediareferences = array();
+ if($conf['refcheck']){
+ require_once(DOKU_INC.'inc/fulltext.php');
+ $mediareferences = ft_mediause($id,$conf['refshow']);
+ }
+
+ if(!count($mediareferences)){
+ $file = mediaFN($id);
+ if(@unlink($file)){
+ require_once(DOKU_INC.'inc/changelog.php');
+ addMediaLogEntry(time(), $id, DOKU_CHANGE_TYPE_DELETE);
+ io_sweepNS($id,'mediadir');
+ return 0;
+ }
+ //something went wrong
+ return new IXR_ERROR(1, 'Could not delete file');
+ } else {
+ return new IXR_ERROR(1, 'File is still referenced');
+ }
+ }
+
+ /**
+ * Moves the temporary file to its final destination.
+ *
+ * Michael Klier <chi@chimeric.de>
+ */
+ function _media_upload_action($data) {
+ global $conf;
+
+ if(is_array($data) && count($data)===5) {
+ io_createNamespace($data[2], 'media');
+ if(rename($data[0], $data[1])) {
+ chmod($data[1], $conf['fmode']);
+ media_notify($data[2], $data[1], $data[3]);
+ // add a log entry to the media changelog
+ require_once(DOKU_INC.'inc/changelog.php');
+ if ($data[4]) {
+ addMediaLogEntry(time(), $data[2], DOKU_CHANGE_TYPE_EDIT);
+ } else {
+ addMediaLogEntry(time(), $data[2], DOKU_CHANGE_TYPE_CREATE);
+ }
+ return $data[2];
+ } else {
+ return new IXR_ERROR(1, 'Upload failed.');
+ }
+ } else {
+ return new IXR_ERROR(1, 'Upload failed.');
+ }
+ }
+
+ /**
+ * Returns the permissions of a given wiki page
+ */
+ function aclCheck($id) {
+ return auth_quickaclcheck($id);
+ }
+
+ /**
+ * Lists all links contained in a wiki page
+ *
+ * @author Michael Klier <chi@chimeric.de>
+ */
+ function listLinks($id) {
+ if(auth_quickaclcheck($id) < AUTH_READ){
+ return new IXR_Error(1, 'You are not allowed to read this page');
+ }
+ $links = array();
+
+ // resolve page instructions
+ $ins = p_cached_instructions(wikiFN(cleanID($id)));
+
+ // instantiate new Renderer - needed for interwiki links
+ include(DOKU_INC.'inc/parser/xhtml.php');
+ $Renderer = new Doku_Renderer_xhtml();
+ $Renderer->interwiki = getInterwiki();
+
+ // parse parse instructions
+ foreach($ins as $in) {
+ $link = array();
+ switch($in[0]) {
+ case 'internallink':
+ $link['type'] = 'local';
+ $link['page'] = $in[1][0];
+ $link['href'] = wl($in[1][0]);
+ array_push($links,$link);
+ break;
+ case 'externallink':
+ $link['type'] = 'extern';
+ $link['page'] = $in[1][0];
+ $link['href'] = $in[1][0];
+ array_push($links,$link);
+ break;
+ case 'interwikilink':
+ $url = $Renderer->_resolveInterWiki($in[1][2],$in[1][3]);
+ $link['type'] = 'extern';
+ $link['page'] = $url;
+ $link['href'] = $url;
+ array_push($links,$link);
+ break;
+ }
+ }
+
+ return ($links);
+ }
+
+ /**
+ * Returns a list of recent changes since give timestamp
+ *
+ * @author Michael Hamann <michael@content-space.de>
+ * @author Michael Klier <chi@chimeric.de>
+ */
+ function getRecentChanges($timestamp) {
+ if(strlen($timestamp) != 10)
+ return new IXR_Error(20, 'The provided value is not a valid timestamp');
+
+ require_once(DOKU_INC.'inc/changelog.php');
+ require_once(DOKU_INC.'inc/pageutils.php');
+
+ $recents = getRecentsSince($timestamp);
+
+ $changes = array();
+
+ foreach ($recents as $recent) {
+ $change = array();
+ $change['name'] = $recent['id'];
+ $change['lastModified'] = new IXR_Date($recent['date']);
+ $change['author'] = $recent['user'];
+ $change['version'] = $recent['date'];
+ $change['perms'] = $recent['perms'];
+ $change['size'] = @filesize(wikiFN($recent['id']));
+ array_push($changes, $change);
+ }
+
+ if (!empty($changes)) {
+ return $changes;
+ } else {
+ // in case we still have nothing at this point
+ return new IXR_Error(30, 'There are no changes in the specified timeframe');
+ }
+ }
+
+ /**
+ * Returns a list of recent media changes since give timestamp
+ *
+ * @author Michael Hamann <michael@content-space.de>
+ * @author Michael Klier <chi@chimeric.de>
+ */
+ function getRecentMediaChanges($timestamp) {
+ if(strlen($timestamp) != 10)
+ return new IXR_Error(20, 'The provided value is not a valid timestamp');
+
+ require_once(DOKU_INC.'inc/changelog.php');
+ require_once(DOKU_INC.'inc/pageutils.php');
+
+ $recents = getRecentsSince($timestamp, null, '', RECENTS_MEDIA_CHANGES);
+
+ $changes = array();
+
+ foreach ($recents as $recent) {
+ $change = array();
+ $change['name'] = $recent['id'];
+ $change['lastModified'] = new IXR_Date($recent['date']);
+ $change['author'] = $recent['user'];
+ $change['version'] = $recent['date'];
+ $change['perms'] = $recent['perms'];
+ $change['size'] = @filesize(mediaFN($recent['id']));
+ array_push($changes, $change);
+ }
+
+ if (!empty($changes)) {
+ return $changes;
+ } else {
+ // in case we still have nothing at this point
+ return new IXR_Error(30, 'There are no changes in the specified timeframe');
+ }
+ }
+
+ /**
+ * Returns a list of available revisions of a given wiki page
+ *
+ * @author Michael Klier <chi@chimeric.de>
+ */
+ function pageVersions($id, $first) {
+ global $conf;
+
+ $versions = array();
+
+ if(empty($id))
+ return new IXR_Error(1, 'Empty page ID');
+
+ require_once(DOKU_INC.'inc/changelog.php');
+
+ $revisions = getRevisions($id, $first, $conf['recent']+1);
+
+ if(count($revisions)==0 && $first!=0) {
+ $first=0;
+ $revisions = getRevisions($id, $first, $conf['recent']+1);
+ }
+
+ if(count($revisions)>0 && $first==0) {
+ array_unshift($revisions, ''); // include current revision
+ array_pop($revisions); // remove extra log entry
+ }
+
+ $hasNext = false;
+ if(count($revisions)>$conf['recent']) {
+ $hasNext = true;
+ array_pop($revisions); // remove extra log entry
+ }
+
+ if(!empty($revisions)) {
+ foreach($revisions as $rev) {
+ $file = wikiFN($id,$rev);
+ $time = @filemtime($file);
+ // we check if the page actually exists, if this is not the
+ // case this can lead to less pages being returned than
+ // specified via $conf['recent']
+ if($time){
+ $info = getRevisionInfo($id, $time, 1024);
+ if(!empty($info)) {
+ $data['user'] = $info['user'];
+ $data['ip'] = $info['ip'];
+ $data['type'] = $info['type'];
+ $data['sum'] = $info['sum'];
+ $data['modified'] = new IXR_Date($info['date']);
+ $data['version'] = $info['date'];
+ array_push($versions, $data);
+ }
+ }
+ }
+ return $versions;
+ } else {
+ return array();
+ }
+ }
+
+ /**
+ * The version of Wiki RPC API supported
+ */
+ function wiki_RPCVersion(){
+ return 2;
+ }
+
+
+ /**
+ * Locks or unlocks a given batch of pages
+ *
+ * Give an associative array with two keys: lock and unlock. Both should contain a
+ * list of pages to lock or unlock
+ *
+ * Returns an associative array with the keys locked, lockfail, unlocked and
+ * unlockfail, each containing lists of pages.
+ */
+ function setLocks($set){
+ $locked = array();
+ $lockfail = array();
+ $unlocked = array();
+ $unlockfail = array();
+
+ foreach((array) $set['lock'] as $id){
+ if(checklock($id)){
+ $lockfail[] = $id;
+ }else{
+ lock($id);
+ $locked[] = $id;
+ }
+ }
+
+ foreach((array) $set['unlock'] as $id){
+ if(unlock($id)){
+ $unlocked[] = $id;
+ }else{
+ $unlockfail[] = $id;
+ }
+ }
+
+ return array(
+ 'locked' => $locked,
+ 'lockfail' => $lockfail,
+ 'unlocked' => $unlocked,
+ 'unlockfail' => $unlockfail,
+ );
+ }
+
+ function getAPIVersion(){
+ return DOKU_XMLRPC_API_VERSION;
+ }
+
+ function login($user,$pass){
+ global $conf;
+ global $auth;
+ if(!$conf['useacl']) return 0;
+ if(!$auth) return 0;
+ if($auth->canDo('external')){
+ return $auth->trustExternal($user,$pass,false);
+ }else{
+ return auth_login($user,$pass,false,true);
+ }
+ }
+
+
+}
+
+$server = new dokuwiki_xmlrpc_server();
+
+// vim:ts=4:sw=4:et:enc=utf-8:
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/README b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/README
new file mode 100644
index 000000000..90bab9578
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/README
@@ -0,0 +1,2 @@
+These icons were taken from the nuvoX KDE icon theme and are GPL licensed
+See http://www.kde-look.org/content/show.php/nuvoX?content=38467
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/acl.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/acl.png
new file mode 100644
index 000000000..96fb4cd56
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/acl.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/config.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/config.png
new file mode 100644
index 000000000..e4d376d85
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/config.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/plugin.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/plugin.png
new file mode 100644
index 000000000..e2823bac7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/plugin.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/popularity.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/popularity.png
new file mode 100644
index 000000000..4e22aaf0d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/popularity.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/revert.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/revert.png
new file mode 100644
index 000000000..002d3a75b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/revert.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/usermanager.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/usermanager.png
new file mode 100644
index 000000000..c5c8dc6d6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/usermanager.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/arrow_down.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/arrow_down.gif
new file mode 100644
index 000000000..ff13b9585
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/arrow_down.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/arrow_up.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/arrow_up.gif
new file mode 100644
index 000000000..d491c18db
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/arrow_up.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/at.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/at.gif
new file mode 100644
index 000000000..8bdf40d54
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/at.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/blank.gif
new file mode 100644
index 000000000..9935f8210
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/close.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/close.png
new file mode 100644
index 000000000..e1b498c14
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/close.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/del.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/del.png
new file mode 100644
index 000000000..a3260d718
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/del.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/diff.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/diff.png
new file mode 100644
index 000000000..0b98d79ac
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/diff.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/edit.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/edit.gif
new file mode 100644
index 000000000..a2a23de7b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/edit.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/error.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/error.png
new file mode 100644
index 000000000..8a1ba4c66
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/error.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/bz2.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/bz2.png
new file mode 100644
index 000000000..d48cae038
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/bz2.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/c.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/c.png
new file mode 100644
index 000000000..9446afcb4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/c.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/conf.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/conf.png
new file mode 100644
index 000000000..ddffe6fd1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/conf.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/cpp.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/cpp.png
new file mode 100644
index 000000000..2dc51b16d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/cpp.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/cs.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/cs.png
new file mode 100644
index 000000000..d5db29ba5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/cs.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/css.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/css.png
new file mode 100644
index 000000000..89c1537fd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/css.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/deb.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/deb.png
new file mode 100644
index 000000000..9229d8783
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/deb.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/doc.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/doc.png
new file mode 100644
index 000000000..932567f8a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/doc.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/file.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/file.png
new file mode 100644
index 000000000..817014fa7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/file.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/gif.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/gif.png
new file mode 100644
index 000000000..b4c07a912
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/gif.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/gz.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/gz.png
new file mode 100644
index 000000000..2426bd169
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/gz.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/htm.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/htm.png
new file mode 100644
index 000000000..1a6812185
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/htm.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/html.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/html.png
new file mode 100644
index 000000000..672cbce42
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/html.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/index.php b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/index.php
new file mode 100644
index 000000000..c1e64fe2a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/index.php
@@ -0,0 +1,50 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ lang="en" dir="ltr">
+<head>
+ <title>filetype icons</title>
+
+ <style type="text/css">
+ body {
+ background-color: #ccc;
+ font-family: Arial;
+ }
+
+ .box {
+ width: 200px;
+ float:left;
+ padding: 0.5em;
+ margin: 0;
+ }
+
+ .white {
+ background-color: #fff;
+ }
+
+ .black {
+ background-color: #000;
+ }
+ </style>
+
+</head>
+<body>
+
+<div class="white box">
+<?php
+foreach (glob('*.png') as $img) {
+ echo '<img src="'.$img.'" alt="'.$img.'" title="'.$img.'" /> ';
+}
+?>
+</div>
+
+<div class="black box">
+<?php
+foreach (glob('*.png') as $img) {
+ echo '<img src="'.$img.'" alt="'.$img.'" title="'.$img.'" /> ';
+}
+?>
+</div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/java.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/java.png
new file mode 100644
index 000000000..c5f2fd09f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/java.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/jpeg.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/jpeg.png
new file mode 100644
index 000000000..aa4cc23a5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/jpeg.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/jpg.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/jpg.png
new file mode 100644
index 000000000..1fb6cc1fb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/jpg.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/js.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/js.png
new file mode 100644
index 000000000..0c314eb56
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/js.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/lua.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/lua.png
new file mode 100644
index 000000000..7c07d023f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/lua.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odc.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odc.png
new file mode 100644
index 000000000..47f65c84d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odc.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odf.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odf.png
new file mode 100644
index 000000000..a2fbc5195
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odf.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odg.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odg.png
new file mode 100644
index 000000000..434f18262
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odg.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odi.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odi.png
new file mode 100644
index 000000000..74f6303d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odi.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odp.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odp.png
new file mode 100644
index 000000000..a5c77f845
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odp.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ods.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ods.png
new file mode 100644
index 000000000..2ab1273f0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ods.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odt.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odt.png
new file mode 100644
index 000000000..b0c21fc1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odt.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/pdf.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/pdf.png
new file mode 100644
index 000000000..638066dea
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/pdf.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/php.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/php.png
new file mode 100644
index 000000000..e735f875b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/php.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/pl.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/pl.png
new file mode 100644
index 000000000..6ac381cd7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/pl.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/png.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/png.png
new file mode 100644
index 000000000..f0b5b00ee
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/png.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ppt.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ppt.png
new file mode 100644
index 000000000..adaefc602
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ppt.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ps.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ps.png
new file mode 100644
index 000000000..c51c763ab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ps.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/py.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/py.png
new file mode 100644
index 000000000..a21b8da49
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/py.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rar.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rar.png
new file mode 100644
index 000000000..a6af4d1ca
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rar.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rb.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rb.png
new file mode 100644
index 000000000..45f448978
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rb.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rpm.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rpm.png
new file mode 100644
index 000000000..22212eafa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rpm.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rtf.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rtf.png
new file mode 100644
index 000000000..d8bada5fe
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rtf.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/swf.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/swf.png
new file mode 100644
index 000000000..0729ed020
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/swf.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxc.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxc.png
new file mode 100644
index 000000000..419c183c1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxc.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxd.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxd.png
new file mode 100644
index 000000000..5801bb23a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxi.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxi.png
new file mode 100644
index 000000000..2a94290d7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxi.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxw.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxw.png
new file mode 100644
index 000000000..6da97beb3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxw.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/tar.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/tar.png
new file mode 100644
index 000000000..5a2f717fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/tar.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/tgz.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/tgz.png
new file mode 100644
index 000000000..141acf564
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/tgz.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/txt.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/txt.png
new file mode 100644
index 000000000..da20009c6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/txt.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/xls.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/xls.png
new file mode 100644
index 000000000..e8cd58dc0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/xls.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/xml.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/xml.png
new file mode 100644
index 000000000..eb4632397
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/xml.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/zip.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/zip.png
new file mode 100644
index 000000000..999ffbe80
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/zip.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/history.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/history.png
new file mode 100644
index 000000000..ef9e311d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/history.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/images/index.html
new file mode 100644
index 000000000..d614603ac
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/index.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="refresh" content="0; URL=../../" />
+<meta name="robots" content="noindex" />
+<title>nothing here...</title>
+</head>
+<body>
+<!-- this is just here to prevent directory browsing -->
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/info.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/info.png
new file mode 100644
index 000000000..a237c1782
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/info.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki.png
new file mode 100644
index 000000000..73d6f8d39
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.de.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.de.gif
new file mode 100644
index 000000000..f52c1c581
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.de.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.gif
new file mode 100644
index 000000000..f52c1c581
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.uk.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.uk.gif
new file mode 100644
index 000000000..f52c1c581
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.uk.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/coral.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/coral.gif
new file mode 100644
index 000000000..0f9f67587
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/coral.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/doku.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/doku.gif
new file mode 100644
index 000000000..7dc4248e8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/doku.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/dokubug.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/dokubug.gif
new file mode 100644
index 000000000..3432b8d57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/dokubug.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/google.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/google.gif
new file mode 100644
index 000000000..fb39f6152
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/google.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/meatball.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/meatball.gif
new file mode 100644
index 000000000..7ac545436
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/meatball.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/phpfn.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/phpfn.gif
new file mode 100644
index 000000000..638d4c450
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/phpfn.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/sb.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/sb.gif
new file mode 100644
index 000000000..e272a29b7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/sb.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wiki.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wiki.gif
new file mode 100644
index 000000000..e8dc5d274
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wiki.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wp.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wp.gif
new file mode 100644
index 000000000..ca853b8c9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wp.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpde.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpde.gif
new file mode 100644
index 000000000..ca853b8c9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpde.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpes.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpes.gif
new file mode 100644
index 000000000..ca853b8c9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpes.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpfr.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpfr.gif
new file mode 100644
index 000000000..ca853b8c9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpfr.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpjp.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpjp.gif
new file mode 100644
index 000000000..ca853b8c9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpjp.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpmeta.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpmeta.gif
new file mode 100644
index 000000000..ca853b8c9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpmeta.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wppl.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wppl.gif
new file mode 100644
index 000000000..ca853b8c9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wppl.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/larger.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/larger.gif
new file mode 100644
index 000000000..e137c92fa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/larger.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc-nd.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc-nd.png
new file mode 100644
index 000000000..49f272f82
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc-nd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc-sa.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc-sa.png
new file mode 100644
index 000000000..0f2a0f107
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc-sa.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc.png
new file mode 100644
index 000000000..5f9821470
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nd.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nd.png
new file mode 100644
index 000000000..8f317035e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-sa.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-sa.png
new file mode 100644
index 000000000..f0a944e0b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-sa.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by.png
new file mode 100644
index 000000000..822491edb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc.png
new file mode 100644
index 000000000..a66f4d1a0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/gnufdl.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/gnufdl.png
new file mode 100644
index 000000000..1371aba88
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/gnufdl.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/publicdomain.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/publicdomain.png
new file mode 100644
index 000000000..cedc39c62
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/publicdomain.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc-nd.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc-nd.png
new file mode 100644
index 000000000..b27ead2f6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc-nd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc-sa.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc-sa.png
new file mode 100644
index 000000000..1c54f994d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc-sa.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc.png
new file mode 100644
index 000000000..33c7b1fa4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nd.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nd.png
new file mode 100644
index 000000000..52073c043
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-sa.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-sa.png
new file mode 100644
index 000000000..0b1880f91
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-sa.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by.png
new file mode 100644
index 000000000..99d8efd35
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc.png
new file mode 100644
index 000000000..adfa085bd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/gnufdl.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/gnufdl.png
new file mode 100644
index 000000000..cb815ac13
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/gnufdl.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/publicdomain.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/publicdomain.png
new file mode 100644
index 000000000..f78e73d02
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/publicdomain.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/list-minus.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/list-minus.gif
new file mode 100644
index 000000000..36902f159
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/list-minus.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/list-plus.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/list-plus.gif
new file mode 100644
index 000000000..adc3fac8a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/list-plus.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/loading.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/loading.gif
new file mode 100644
index 000000000..240bd88c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/loading.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/magnifier.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/magnifier.png
new file mode 100644
index 000000000..cf3d97f75
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/magnifier.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/minus.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/minus.gif
new file mode 100644
index 000000000..499a2e2aa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/minus.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/multiupload.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/multiupload.png
new file mode 100644
index 000000000..1e8efa063
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/multiupload.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/notify.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/notify.png
new file mode 100644
index 000000000..6e0015df4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/notify.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/ns.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/ns.png
new file mode 100644
index 000000000..da3c2a2d7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/ns.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/page.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/page.png
new file mode 100644
index 000000000..03ddd799f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/page.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/pencil.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/pencil.png
new file mode 100644
index 000000000..0bfecd50e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/pencil.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/plus.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/plus.gif
new file mode 100644
index 000000000..9306686d8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/plus.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smaller.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smaller.gif
new file mode 100644
index 000000000..66d3a51e7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smaller.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/delete.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/delete.gif
new file mode 100644
index 000000000..d668348b9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/delete.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/fixme.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/fixme.gif
new file mode 100644
index 000000000..b66ea99d6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/fixme.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_arrow.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_arrow.gif
new file mode 100644
index 000000000..2880055cc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_arrow.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_biggrin.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_biggrin.gif
new file mode 100644
index 000000000..d3527723c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_biggrin.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_confused.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_confused.gif
new file mode 100644
index 000000000..0c49e0698
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_confused.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_cool.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_cool.gif
new file mode 100644
index 000000000..cead0306c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_cool.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_cry.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_cry.gif
new file mode 100644
index 000000000..7d54b1f99
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_cry.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_doubt.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_doubt.gif
new file mode 100644
index 000000000..fd7903b19
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_doubt.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_doubt2.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_doubt2.gif
new file mode 100644
index 000000000..eb4b70b66
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_doubt2.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_eek.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_eek.gif
new file mode 100644
index 000000000..5d3978106
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_eek.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_evil.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_evil.gif
new file mode 100644
index 000000000..ab1aa8e12
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_evil.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_exclaim.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_exclaim.gif
new file mode 100644
index 000000000..6e50e2eec
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_exclaim.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_frown.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_frown.gif
new file mode 100644
index 000000000..d2ac78c04
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_frown.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_fun.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_fun.gif
new file mode 100644
index 000000000..a8bb8a303
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_fun.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_idea.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_idea.gif
new file mode 100644
index 000000000..a40ae0d7e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_idea.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_kaddi.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_kaddi.gif
new file mode 100644
index 000000000..1410f7f1e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_kaddi.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_lol.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_lol.gif
new file mode 100644
index 000000000..374ba150f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_lol.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_mrgreen.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_mrgreen.gif
new file mode 100644
index 000000000..b54cd0f94
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_mrgreen.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_neutral.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_neutral.gif
new file mode 100644
index 000000000..4f311567e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_neutral.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_question.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_question.gif
new file mode 100644
index 000000000..9d072265b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_question.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_razz.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_razz.gif
new file mode 100644
index 000000000..29da2a2fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_razz.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_redface.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_redface.gif
new file mode 100644
index 000000000..ad7628320
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_redface.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_rolleyes.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_rolleyes.gif
new file mode 100644
index 000000000..d7f5f2f4b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_rolleyes.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_sad.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_sad.gif
new file mode 100644
index 000000000..d2ac78c04
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_sad.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_silenced.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_silenced.gif
new file mode 100644
index 000000000..448399b2b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_silenced.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_smile.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_smile.gif
new file mode 100644
index 000000000..7b1f6d304
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_smile.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_smile2.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_smile2.gif
new file mode 100644
index 000000000..769639d32
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_smile2.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_surprised.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_surprised.gif
new file mode 100644
index 000000000..cb2142431
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_surprised.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_twisted.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_twisted.gif
new file mode 100644
index 000000000..502fe247e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_twisted.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_wink.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_wink.gif
new file mode 100644
index 000000000..d14828804
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_wink.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/success.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/success.png
new file mode 100644
index 000000000..a5ae9f11b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/success.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/throbber.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/throbber.gif
new file mode 100644
index 000000000..d04bd3949
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/throbber.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/bold.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/bold.png
new file mode 100644
index 000000000..7ebe99ee9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/bold.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/chars.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/chars.png
new file mode 100644
index 000000000..3f3396aeb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/chars.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h.png
new file mode 100644
index 000000000..aae052462
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h1.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h1.png
new file mode 100644
index 000000000..93dae935f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h1.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h2.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h2.png
new file mode 100644
index 000000000..f0eee3bd0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h2.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h3.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h3.png
new file mode 100644
index 000000000..8cfd4c077
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h3.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h4.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h4.png
new file mode 100644
index 000000000..7b8f51a1b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h4.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h5.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h5.png
new file mode 100644
index 000000000..44b00d9c8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h5.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hequal.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hequal.png
new file mode 100644
index 000000000..8fc6b0d75
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hequal.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hminus.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hminus.png
new file mode 100644
index 000000000..f9d67adcb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hminus.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hplus.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hplus.png
new file mode 100644
index 000000000..66f3d5e33
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hplus.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hr.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hr.png
new file mode 100644
index 000000000..f86a8ec94
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hr.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/image.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/image.png
new file mode 100644
index 000000000..1aab5d7de
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/image.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/italic.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/italic.png
new file mode 100644
index 000000000..324e7c036
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/italic.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/link.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/link.png
new file mode 100644
index 000000000..41e52c6ab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/linkextern.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/linkextern.png
new file mode 100644
index 000000000..75afd3dc2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/linkextern.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/mono.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/mono.png
new file mode 100644
index 000000000..178cec9f2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/mono.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/ol.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/ol.png
new file mode 100644
index 000000000..3162fa21d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/ol.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/sig.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/sig.png
new file mode 100644
index 000000000..ef997b7cd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/sig.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/smiley.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/smiley.png
new file mode 100644
index 000000000..e92845cb4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/smiley.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/strike.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/strike.png
new file mode 100644
index 000000000..203aacc2b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/strike.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/ul.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/ul.png
new file mode 100644
index 000000000..471171db4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/ul.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/underline.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/underline.png
new file mode 100644
index 000000000..bf9665a68
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/underline.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/trash.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/trash.png
new file mode 100644
index 000000000..ebad933c8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/trash.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/up.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/up.png
new file mode 100644
index 000000000..557d5e6a9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/up.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/wrap.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/wrap.gif
new file mode 100644
index 000000000..f2253e4a2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/wrap.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/index.html
new file mode 100644
index 000000000..8cb33512e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/index.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="refresh" content="0; URL=../" />
+<meta name="robots" content="noindex" />
+<title>nothing here...</title>
+</head>
+<body>
+<!-- this is just here to prevent directory browsing -->
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/admin.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/admin.php
new file mode 100644
index 000000000..34149ea05
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/admin.php
@@ -0,0 +1,809 @@
+<?php
+/**
+ * ACL administration functions
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Anika Henke <anika@selfthinker.org> (concepts)
+ * @author Frank Schubert <frank@schokilade.de> (old version)
+ */
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'admin.php');
+
+/**
+ * All DokuWiki plugins to extend the admin function
+ * need to inherit from this class
+ */
+class admin_plugin_acl extends DokuWiki_Admin_Plugin {
+ var $acl = null;
+ var $ns = null;
+ var $who = '';
+ var $usersgroups = array();
+ var $specials = array();
+
+ /**
+ * return some info
+ */
+ function getInfo(){
+ return array(
+ 'author' => 'Andreas Gohr',
+ 'email' => 'andi@splitbrain.org',
+ 'date' => '2010-01-17',
+ 'name' => 'ACL Manager',
+ 'desc' => 'Manage Page Access Control Lists',
+ 'url' => 'http://dokuwiki.org/plugin:acl',
+ );
+ }
+
+ /**
+ * return prompt for admin menu
+ */
+ function getMenuText($language) {
+ return $this->getLang('admin_acl');
+ }
+
+ /**
+ * return sort order for position in admin menu
+ */
+ function getMenuSort() {
+ return 1;
+ }
+
+ /**
+ * handle user request
+ *
+ * Initializes internal vars and handles modifications
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function handle() {
+ global $AUTH_ACL;
+ global $ID;
+ global $auth;
+ // fresh 1:1 copy without replacements
+ $AUTH_ACL = $this->load_acl_config(false);
+ // namespace given?
+ if($_REQUEST['ns'] == '*'){
+ $this->ns = '*';
+ }else{
+ $this->ns = cleanID($_REQUEST['ns']);
+ }
+
+ // user or group choosen?
+ $who = trim($_REQUEST['acl_w']);
+ if($_REQUEST['acl_t'] == '__g__' && $who){
+ $this->who = '@'.ltrim($auth->cleanGroup($who),'@');
+ }elseif($_REQUEST['acl_t'] == '__u__' && $who){
+ $this->who = ltrim($auth->cleanUser($who),'@');
+ }elseif($_REQUEST['acl_t'] &&
+ $_REQUEST['acl_t'] != '__u__' &&
+ $_REQUEST['acl_t'] != '__g__'){
+ $this->who = $_REQUEST['acl_t'];
+ }elseif($who){
+ $this->who = $who;
+ }
+
+ // handle modifications
+ if(isset($_REQUEST['cmd']) && checkSecurityToken()){
+
+ //error_log("dokuwiki:acl:cms!!!");
+ // scope for modifications
+ if($this->ns){
+ if($this->ns == '*'){
+ $scope = '*';
+ }else{
+ $scope = $this->ns.':*';
+ }
+ }else{
+ $scope = $ID;
+ }
+
+ if(isset($_REQUEST['cmd']['save']) && $scope && $this->who && isset($_REQUEST['acl'])){
+ //error_log("dokuwiki:acl:save!!!");
+ // handle additions or single modifications
+ $this->_acl_del($scope, $this->who);
+ $this->_acl_add($scope, $this->who, (int) $_REQUEST['acl']);
+ }elseif(isset($_REQUEST['cmd']['del']) && $scope && $this->who){
+ //error_log("dokuwiki:acl:delete!!!");
+ // handle single deletions
+ $this->_acl_del($scope, $this->who);
+ }elseif(isset($_REQUEST['cmd']['update'])){
+ //error_log("dokuwiki:acl:update!!!");
+ // handle update of the whole file
+ foreach((array) $_REQUEST['del'] as $where => $names){
+ // remove all rules marked for deletion
+ foreach($names as $who) {
+ unset($_REQUEST['acl'][$where][$who]);
+ //error_log("dokuwiki:acl:where_who:".$where.":".$who);
+ }
+ }
+ // prepare lines
+ $lines = array();
+ // keep header
+ foreach($AUTH_ACL as $line){
+ if($line{0} == '#'){
+ $lines[] = $line."\n";
+ }else{
+ $lines[] = $line."\n";
+ }
+ }
+ // re-add all rules
+ foreach((array) $_REQUEST['acl'] as $where => $opt){
+ foreach($opt as $who => $perm){
+ //error_log("dokuwiki:acl:where_acl:".$where.":".$who);
+ $who = auth_nameencode($who,true);
+ $lines[] = "$where\t$who\t$perm\n";
+ }
+ }
+ // save it
+ $AUTH_ACL = $this->save_acl_config(join('',$lines));
+
+ }
+
+ $AUTH_ACL = $this->load_acl_config(false);
+ }
+
+ // initialize ACL array
+ $this->_init_acl_config();
+ }
+
+ /**
+ * ACL Output function
+ *
+ * print a table with all significant permissions for the
+ * current id
+ *
+ * @author Frank Schubert <frank@schokilade.de>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function html() {
+ global $ID;
+
+ echo '<div id="acl_manager">'.NL;
+ echo '<h1>'.$this->getLang('admin_acl').'</h1>'.NL;
+ echo '<div class="level1">'.NL;
+
+ echo '<div id="acl__tree">'.NL;
+ $this->_html_explorer($_REQUEST['ns']);
+ echo '</div>'.NL;
+
+ echo '<div id="acl__detail">'.NL;
+ $this->_html_detail();
+ echo '</div>'.NL;
+ echo '</div>'.NL;
+
+ echo '<div class="clearer"></div>';
+ echo '<h2>'.$this->getLang('current').'</h2>'.NL;
+ echo '<div class="level2">'.NL;
+ $this->_html_table();
+ echo '</div>'.NL;
+
+ echo '<div class="footnotes"><div class="fn">'.NL;
+ echo '<sup><a id="fn__1" class="fn_bot" name="fn__1" href="#fnt__1">1)</a></sup>'.NL;
+ echo $this->getLang('p_include');
+ echo '</div></div>';
+
+ echo '</div>'.NL;
+ }
+
+ /**
+ * returns array with set options for building links
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _get_opts($addopts=null){
+ global $ID;
+ $opts = array(
+ 'do'=>'admin',
+ 'dokupage'=>'acl',
+ );
+ if($this->ns) $opts['ns'] = $this->ns;
+ if($this->who) $opts['acl_w'] = $this->who;
+
+ if(is_null($addopts)) return $opts;
+ return array_merge($opts, $addopts);
+ }
+
+ /**
+ * Display a tree menu to select a page or namespace
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _html_explorer(){
+ require_once(DOKU_INC.'inc/search.php');
+ global $conf;
+ global $ID;
+ global $lang;
+
+ $dir = $conf['datadir'];
+ $ns = $this->ns;
+ if(empty($ns)){
+ $ns = dirname(str_replace(':','/',$ID));
+ if($ns == '.') $ns ='';
+ }elseif($ns == '*'){
+ $ns ='';
+ }
+ $ns = utf8_encodeFN(str_replace(':','/',$ns));
+
+ $data = $this->_get_tree($ns);
+
+ // wrap a list with the root level around the other namespaces
+ $item = array( 'level' => 0, 'id' => '*', 'type' => 'd',
+ 'open' =>'true', 'label' => '['.$lang['mediaroot'].']');
+
+ echo '<ul class="acltree">';
+ echo $this->_html_li_acl($item);
+ echo '<div class="li">';
+ echo $this->_html_list_acl($item);
+ echo '</div>';
+ echo html_buildlist($data,'acl',
+ array($this,'_html_list_acl'),
+ array($this,'_html_li_acl'));
+ echo '</li>';
+ echo '</ul>';
+
+ }
+
+ /**
+ * get a combined list of media and page files
+ *
+ * @param string $folder an already converted filesystem folder of the current namespace
+ * @param string $limit limit the search to this folder
+ */
+ function _get_tree($folder,$limit=''){
+ global $conf;
+
+ // read tree structure from pages and media
+ $data = array();
+ search($data,$conf['datadir'],'search_index',array('ns' => $folder),$limit);
+ $media = array();
+ search($media,$conf['mediadir'],'search_index',array('ns' => $folder, 'nofiles' => true),$limit);
+ $data = array_merge($data,$media);
+ unset($media);
+
+ // combine by sorting and removing duplicates
+ usort($data,array($this,'_tree_sort'));
+ $count = count($data);
+ if($count>0) for($i=1; $i<$count; $i++){
+ if($data[$i]['type'] == 'f') break; // namespaces come first, we're done
+ if($data[$i-1]['id'] == $data[$i]['id']) unset($data[$i]);
+ }
+ return $data;
+ }
+
+ /**
+ * usort callback
+ *
+ * Sorts the combined trees of media and page files
+ */
+ function _tree_sort($a,$b){
+ if($a['type'] == 'd' && $b['type'] == 'f'){
+ return -1;
+ }elseif($a['type'] == 'f' && $b['type'] == 'd'){
+ return 1;
+ }else{
+ return strcmp($a['id'],$b['id']);
+ }
+ }
+
+ /**
+ * Display the current ACL for selected where/who combination with
+ * selectors and modification form
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _html_detail(){
+ global $conf;
+ global $ID;
+
+ echo '<form action="'.wl().'" method="post" accept-charset="utf-8"><div class="no">'.NL;
+
+ echo '<div id="acl__user">';
+ echo $this->getLang('acl_perms').' ';
+ $inl = $this->_html_select();
+ echo '<input type="text" name="acl_w" class="edit" value="'.(($inl)?'':hsc(ltrim($this->who,'@'))).'" />'.NL;
+ echo '<input type="submit" value="'.$this->getLang('btn_select').'" class="button" />'.NL;
+ echo '</div>'.NL;
+
+ echo '<div id="acl__info">';
+ $this->_html_info();
+ echo '</div>';
+
+ echo '<input type="hidden" name="ns" value="'.hsc($this->ns).'" />'.NL;
+ echo '<input type="hidden" name="id" value="'.hsc($ID).'" />'.NL;
+ echo '<input type="hidden" name="do" value="admin" />'.NL;
+ echo '<input type="hidden" name="dokupage" value="acl" />'.NL;
+ echo '<input type="hidden" name="sectok" value="'.getSecurityToken().'" />'.NL;
+ echo '</div></form>'.NL;
+ }
+
+ /**
+ * Print infos and editor
+ */
+ function _html_info(){
+ global $ID;
+
+ if($this->who){
+ $current = $this->_get_exact_perm();
+
+ // explain current permissions
+ $this->_html_explain($current);
+ // load editor
+ $this->_html_acleditor($current);
+ }else{
+ echo '<p>';
+ if($this->ns){
+ printf($this->getLang('p_choose_ns'),hsc($this->ns));
+ }else{
+ printf($this->getLang('p_choose_id'),hsc($ID));
+ }
+ echo '</p>';
+
+ echo $this->locale_xhtml('help');
+ }
+ }
+
+ /**
+ * Display the ACL editor
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _html_acleditor($current){
+ global $lang;
+
+ echo '<fieldset>';
+ if(is_null($current)){
+ echo '<legend>'.$this->getLang('acl_new').'</legend>';
+ }else{
+ echo '<legend>'.$this->getLang('acl_mod').'</legend>';
+ }
+
+
+ echo $this->_html_checkboxes($current,empty($this->ns),'acl');
+
+ if(is_null($current)){
+ echo '<input type="submit" name="cmd[save]" class="button" value="'.$lang['btn_save'].'" />'.NL;
+ }else{
+ echo '<input type="submit" name="cmd[save]" class="button" value="'.$lang['btn_update'].'" />'.NL;
+ echo '<input type="submit" name="cmd[del]" class="button" value="'.$lang['btn_delete'].'" />'.NL;
+ }
+
+ echo '</fieldset>';
+ }
+
+ /**
+ * Explain the currently set permissions in plain english/$lang
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _html_explain($current){
+ global $ID;
+ global $auth;
+
+ $who = $this->who;
+ $ns = $this->ns;
+
+ // prepare where to check
+ if($ns){
+ if($ns == '*'){
+ $check='*';
+ }else{
+ $check=$ns.':*';
+ }
+ }else{
+ $check = $ID;
+ }
+
+ // prepare who to check
+ if($who{0} == '@'){
+ $user = '';
+ $groups = array(ltrim($who,'@'));
+ }else{
+ $user = auth_nameencode($who);
+ $info = $auth->getUserData($user);
+ if($info === false){
+ $groups = array();
+ }else{
+ $groups = $info['grps'];
+ }
+ }
+
+ // check the permissions
+ $perm = auth_aclcheck($check,$user,$groups);
+
+ // build array of named permissions
+ $names = array();
+ if($perm){
+ if($ns){
+ if($perm >= AUTH_DELETE) $names[] = $this->getLang('acl_perm16');
+ if($perm >= AUTH_UPLOAD) $names[] = $this->getLang('acl_perm8');
+ if($perm >= AUTH_CREATE) $names[] = $this->getLang('acl_perm4');
+ }
+ if($perm >= AUTH_EDIT) $names[] = $this->getLang('acl_perm2');
+ if($perm >= AUTH_READ) $names[] = $this->getLang('acl_perm1');
+ $names = array_reverse($names);
+ }else{
+ $names[] = $this->getLang('acl_perm0');
+ }
+
+ // print permission explanation
+ echo '<p>';
+ if($user){
+ if($ns){
+ printf($this->getLang('p_user_ns'),hsc($who),hsc($ns),join(', ',$names));
+ }else{
+ printf($this->getLang('p_user_id'),hsc($who),hsc($ID),join(', ',$names));
+ }
+ }else{
+ if($ns){
+ printf($this->getLang('p_group_ns'),hsc(ltrim($who,'@')),hsc($ns),join(', ',$names));
+ }else{
+ printf($this->getLang('p_group_id'),hsc(ltrim($who,'@')),hsc($ID),join(', ',$names));
+ }
+ }
+ echo '</p>';
+
+ // add note if admin
+ if($perm == AUTH_ADMIN){
+ echo '<p>'.$this->getLang('p_isadmin').'</p>';
+ }elseif(is_null($current)){
+ echo '<p>'.$this->getLang('p_inherited').'</p>';
+ }
+ }
+
+
+ /**
+ * Item formatter for the tree view
+ *
+ * User function for html_buildlist()
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _html_list_acl($item){
+ global $ID;
+ $ret = '';
+ // what to display
+ if($item['label']){
+ $base = $item['label'];
+ }else{
+ $base = ':'.$item['id'];
+ $base = substr($base,strrpos($base,':')+1);
+ }
+
+ // highlight?
+ if( ($item['type']=='d' && $item['id'] == $this->ns) ||
+ ($item['type']!='d' && $item['id'] == $ID)) $cl = ' cur';
+
+ // namespace or page?
+ if($item['type']=='d'){
+ if($item['open']){
+ $img = DOKU_BASE.'lib/images/minus.gif';
+ $alt = '&minus;';
+ }else{
+ $img = DOKU_BASE.'lib/images/plus.gif';
+ $alt = '+';
+ }
+ $ret .= '<img src="'.$img.'" alt="'.$alt.'" />';
+ $ret .= '<a href="'.wl('',$this->_get_opts(array('ns'=>$item['id'],'sectok'=>getSecurityToken()))).'" class="idx_dir'.$cl.'">';
+ $ret .= $base;
+ $ret .= '</a>';
+ }else{
+ $ret .= '<a href="'.wl('',$this->_get_opts(array('id'=>$item['id'],'ns'=>'','sectok'=>getSecurityToken()))).'" class="wikilink1'.$cl.'">';
+ $ret .= noNS($item['id']);
+ $ret .= '</a>';
+ }
+ return $ret;
+ }
+
+
+ function _html_li_acl($item){
+ return '<li class="level'.$item['level'].'">';
+ }
+
+
+ /**
+ * Get current ACL settings as multidim array
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _init_acl_config(){
+ global $AUTH_ACL;
+ global $conf;
+ $acl_config=array();
+ $usersgroups = array();
+
+ // get special users and groups
+ $this->specials[] = '@ALL';
+ $this->specials[] = '@'.$conf['defaultgroup'];
+ if($conf['manager'] != '!!not set!!'){
+ $this->specials = array_merge($this->specials,
+ array_map('trim',
+ explode(',',$conf['manager'])));
+ }
+ $this->specials = array_filter($this->specials);
+ $this->specials = array_unique($this->specials);
+ sort($this->specials);
+
+ foreach($AUTH_ACL as $line){
+ $line = trim(preg_replace('/#.*$/','',$line)); //ignore comments
+ if(!$line) continue;
+
+ $acl = preg_split('/\s+/',$line);
+ //0 is pagename, 1 is user, 2 is acl
+
+ $acl[1] = rawurldecode($acl[1]);
+ $acl_config[$acl[0]][$acl[1]] = $acl[2];
+
+ // store non-special users and groups for later selection dialog
+ $ug = $acl[1];
+ if(in_array($ug,$this->specials)) continue;
+ $usersgroups[] = $ug;
+ }
+
+ $usersgroups = array_unique($usersgroups);
+ sort($usersgroups);
+ ksort($acl_config);
+
+ $this->acl = $acl_config;
+ $this->usersgroups = $usersgroups;
+ }
+
+ /**
+ * Display all currently set permissions in a table
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _html_table(){
+ global $lang;
+ global $ID;
+
+ echo '<form action="'.wl().'" method="post" accept-charset="utf-8"><div class="no">'.NL;
+ if($this->ns){
+ echo '<input type="hidden" name="ns" value="'.hsc($this->ns).'" />'.NL;
+ }else{
+ echo '<input type="hidden" name="id" value="'.hsc($ID).'" />'.NL;
+ }
+ echo '<input type="hidden" name="acl_w" value="'.hsc($this->who).'" />'.NL;
+ echo '<input type="hidden" name="do" value="admin" />'.NL;
+ echo '<input type="hidden" name="dokupage" value="acl" />'.NL;
+ echo '<input type="hidden" name="sectok" value="'.getSecurityToken().'" />'.NL;
+ echo '<table class="inline">';
+ echo '<tr>';
+ echo '<th>'.$this->getLang('where').'</th>';
+ echo '<th>'.$this->getLang('who').'</th>';
+ echo '<th>'.$this->getLang('perm').'<sup><a id="fnt__1" class="fn_top" name="fnt__1" href="#fn__1">1)</a></sup></th>';
+ echo '<th>'.$lang['btn_delete'].'</th>';
+ echo '</tr>';
+ foreach($this->acl as $where => $set){
+ foreach($set as $who => $perm){
+ echo '<tr>';
+ echo '<td>';
+ if(substr($where,-1) == '*'){
+ echo '<span class="aclns">'.hsc($where).'</span>';
+ $ispage = false;
+ }else{
+ echo '<span class="aclpage">'.hsc($where).'</span>';
+ $ispage = true;
+ }
+ echo '</td>';
+
+ echo '<td>';
+ if($who{0} == '@'){
+ echo '<span class="aclgroup">'.hsc($who).'</span>';
+ }else{
+ echo '<span class="acluser">'.hsc($who).'</span>';
+ }
+ echo '</td>';
+
+ echo '<td>';
+ echo $this->_html_checkboxes($perm,$ispage,'acl['.$where.']['.$who.']');
+ echo '</td>';
+
+ echo '<td align="center">';
+ echo '<input type="checkbox" name="del['.hsc($where).'][]" value="'.hsc($who).'" />';
+ echo '</td>';
+ echo '</tr>';
+ }
+ }
+
+ echo '<tr>';
+ echo '<th align="right" colspan="4">';
+ echo '<input type="submit" value="'.$lang['btn_update'].'" name="cmd[update]" class="button" />';
+ echo '</th>';
+ echo '</tr>';
+ echo '</table>';
+ echo '</div></form>'.NL;
+ }
+
+
+ /**
+ * Returns the permission which were set for exactly the given user/group
+ * and page/namespace. Returns null if no exact match is available
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _get_exact_perm(){
+ global $ID;
+ if($this->ns){
+ if($this->ns == '*'){
+ $check = '*';
+ }else{
+ $check = $this->ns.':*';
+ }
+ }else{
+ $check = $ID;
+ }
+
+ if(isset($this->acl[$check][$this->who])){
+ return $this->acl[$check][$this->who];
+ }else{
+ return null;
+ }
+ }
+
+ function load_acl_config($full) {
+ global $auth;
+ if($auth->cando['getACL']) {
+ $acl = $auth->getACL();
+ } else {
+ $acl = file(DOKU_CONF.'acl.auth.php');
+ }
+ if ($full) return join("\n", $acl)."\n";
+ return $acl;
+ }
+ function save_acl_config($newconfig) {
+ global $auth;
+ if($auth->cando['getACL']) {
+ $auth->setACL($newconfig);
+ return true;
+ } else {
+ return io_saveFile(DOKU_CONF.'acl.auth.php', $newconfig);
+ }
+
+ }
+
+ /**
+ * adds new acl-entry to conf/acl.auth.php
+ *
+ * @author Frank Schubert <frank@schokilade.de>
+ */
+ function _acl_add($acl_scope, $acl_user, $acl_level){
+ $acl_config = $this->load_acl_config(true);
+ $acl_user = auth_nameencode($acl_user,true);
+
+ // max level for pagenames is edit
+ if(strpos($acl_scope,'*') === false) {
+ if($acl_level > AUTH_EDIT) $acl_level = AUTH_EDIT;
+ }
+
+
+ $new_acl = "$acl_scope\t$acl_user\t$acl_level\n";
+
+ $new_config = $acl_config.$new_acl;
+ return $this->save_acl_config($new_config);
+ }
+
+ /**
+ * remove acl-entry from conf/acl.auth.php
+ *
+ * @author Frank Schubert <frank@schokilade.de>
+ */
+ function _acl_del($acl_scope, $acl_user){
+ $acl_config = $this->load_acl_config(false);
+ $acl_user = auth_nameencode($acl_user,true);
+
+ $acl_pattern = '^'.preg_quote($acl_scope,'/').'\s+'.$acl_user.'\s+[0-8].*$';
+
+ // save all non!-matching
+ $new_config = preg_grep("/$acl_pattern/", $acl_config, PREG_GREP_INVERT);
+
+ return $this->save_acl_config(join("\n",$new_config)."\n");
+ }
+
+ /**
+ * print the permission radio boxes
+ *
+ * @author Frank Schubert <frank@schokilade.de>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _html_checkboxes($setperm,$ispage,$name){
+ global $lang;
+
+ static $label = 0; //number labels
+ $ret = '';
+
+ if($ispage && $setperm > AUTH_EDIT) $perm = AUTH_EDIT;
+
+ foreach(array(AUTH_NONE,AUTH_READ,AUTH_EDIT,AUTH_CREATE,AUTH_UPLOAD,AUTH_DELETE) as $perm){
+ $label += 1;
+
+ //general checkbox attributes
+ $atts = array( 'type' => 'radio',
+ 'id' => 'pbox'.$label,
+ 'name' => $name,
+ 'value' => $perm );
+ //dynamic attributes
+ if(!is_null($setperm) && $setperm == $perm) $atts['checked'] = 'checked';
+ if($ispage && $perm > AUTH_EDIT){
+ $atts['disabled'] = 'disabled';
+ $class = ' class="disabled"';
+ }else{
+ $class = '';
+ }
+
+ //build code
+ $ret .= '<label for="pbox'.$label.'" title="'.$this->getLang('acl_perm'.$perm).'"'.$class.'>';
+ $ret .= '<input '.html_attbuild($atts).' />&nbsp;';
+ $ret .= $this->getLang('acl_perm'.$perm);
+ $ret .= '</label>'.NL;
+ }
+ return $ret;
+ }
+
+ /**
+ * Print a user/group selector (reusing already used users and groups)
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _html_select(){
+ global $conf;
+ $inlist = false;
+
+ if($this->who &&
+ !in_array($this->who,$this->usersgroups) &&
+ !in_array($this->who,$this->specials)){
+
+ if($this->who{0} == '@'){
+ $gsel = ' selected="selected"';
+ }else{
+ $usel = ' selected="selected"';
+ }
+ }else{
+ $usel = '';
+ $gsel = '';
+ $inlist = true;
+ }
+
+
+ echo '<select name="acl_t" class="edit">'.NL;
+ echo ' <option value="__g__" class="aclgroup"'.$gsel.'>'.$this->getLang('acl_group').':</option>'.NL;
+ echo ' <option value="__u__" class="acluser"'.$usel.'>'.$this->getLang('acl_user').':</option>'.NL;
+ echo ' <optgroup label="&nbsp;">'.NL;
+ foreach($this->specials as $ug){
+ if($ug == $this->who){
+ $sel = ' selected="selected"';
+ $inlist = true;
+ }else{
+ $sel = '';
+ }
+
+ if($ug{0} == '@'){
+ echo ' <option value="'.hsc($ug).'" class="aclgroup"'.$sel.'>'.hsc($ug).'</option>'.NL;
+ }else{
+ echo ' <option value="'.hsc($ug).'" class="acluser"'.$sel.'>'.hsc($ug).'</option>'.NL;
+ }
+ }
+ echo ' </optgroup>'.NL;
+ echo ' <optgroup label="&nbsp;">'.NL;
+ foreach($this->usersgroups as $ug){
+ if($ug == $this->who){
+ $sel = ' selected="selected"';
+ $inlist = true;
+ }else{
+ $sel = '';
+ }
+
+ if($ug{0} == '@'){
+ echo ' <option value="'.hsc($ug).'" class="aclgroup"'.$sel.'>'.hsc($ug).'</option>'.NL;
+ }else{
+ echo ' <option value="'.hsc($ug).'" class="acluser"'.$sel.'>'.hsc($ug).'</option>'.NL;
+ }
+ }
+ echo ' </optgroup>'.NL;
+ echo '</select>'.NL;
+ return $inlist;
+ }
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/ajax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/ajax.php
new file mode 100644
index 000000000..d3e88d932
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/ajax.php
@@ -0,0 +1,62 @@
+<?php
+/**
+ * AJAX call handler for ACL plugin
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+//fix for Opera XMLHttpRequests
+if(!count($_POST) && $HTTP_RAW_POST_DATA){
+ parse_str($HTTP_RAW_POST_DATA, $_POST);
+}
+
+if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../../');
+require_once(DOKU_INC.'inc/init.php');
+require_once(DOKU_INC.'inc/common.php');
+require_once(DOKU_INC.'inc/pageutils.php');
+require_once(DOKU_INC.'inc/auth.php');
+//close session
+session_write_close();
+
+if(!auth_isadmin()) die('for admins only');
+if(!checkSecurityToken()) die('CRSF Attack');
+
+$ID = getID();
+
+require_once(DOKU_INC.'inc/pluginutils.php');
+require_once(DOKU_INC.'inc/html.php');
+$acl = plugin_load('admin','acl');
+$acl->handle();
+
+$ajax = $_REQUEST['ajax'];
+header('Content-Type: text/html; charset=utf-8');
+
+if($ajax == 'info'){
+ $acl->_html_info();
+}elseif($ajax == 'tree'){
+ require_once(DOKU_INC.'inc/search.php');
+ global $conf;
+ global $ID;
+
+ $dir = $conf['datadir'];
+ $ns = $_REQUEST['ns'];
+ if($ns == '*'){
+ $ns ='';
+ }
+ $ns = cleanID($ns);
+ $lvl = count(explode(':',$ns));
+ $ns = utf8_encodeFN(str_replace(':','/',$ns));
+
+ $data = $acl->_get_tree($ns,$ns);
+
+ foreach($data as $item){
+ $item['level'] = $lvl+1;
+ echo $acl->_html_li_acl($item);
+ echo '<div class="li">';
+ echo $acl->_html_list_acl($item);
+ echo '</div>';
+ echo '</li>';
+ }
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/af/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/af/lang.php
new file mode 100644
index 000000000..04d9b0acf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/af/lang.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Afrikaans language file
+ *
+ */
+$lang['page'] = 'Bladsy';
+$lang['acl_perm0'] = 'Niks';
+$lang['acl_perm1'] = 'Lees';
+$lang['acl_perm2'] = 'Verander';
+$lang['acl_perm4'] = 'Maak';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ar/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ar/lang.php
new file mode 100644
index 000000000..ced250243
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ar/lang.php
@@ -0,0 +1,24 @@
+<?php
+/**
+ * Arabic language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Mostafa Hussein <mostafa@gmail.com>
+ * @author Yaman Hokan <always.smile.yh@hotmail.com>
+ */
+$lang['admin_acl'] = 'إدارة قوائم التحكم بالدخول';
+$lang['acl_group'] = 'مجموعة';
+$lang['acl_user'] = 'مستخدم';
+$lang['acl_perms'] = 'ترخيص لـ';
+$lang['page'] = 'صÙحة';
+$lang['namespace'] = 'Ùضاء التسمية';
+$lang['btn_select'] = 'اختيار';
+$lang['who'] = 'اسم المستخدم / المجموعة';
+$lang['perm'] = 'التصاريح';
+$lang['acl_perm0'] = 'لا يوجد';
+$lang['acl_perm1'] = 'قراءة';
+$lang['acl_perm2'] = 'تحرير';
+$lang['acl_perm4'] = 'إنشاء';
+$lang['acl_perm8'] = 'تحميل';
+$lang['acl_perm16'] = 'مسح';
+$lang['acl_new'] = 'أض٠أضاÙØ© جديدة';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/bg/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/bg/help.txt
new file mode 100644
index 000000000..23028cb35
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/bg/help.txt
@@ -0,0 +1,11 @@
+=== Помощ ===
+
+Ðа тази Ñтраница можете да добавÑте и премахвате Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð·Ð° определÑне на имена и Ñтраници във Вашето Wiki.
+
+ЛевиÑÑ‚ панел показва вÑички налични имена и Ñтраници.
+
+Формата по-горе ви позволÑва да видите и промените разрешениÑта на Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ» или група.
+
+Ð’ таблицата по-долу Ñа показани вÑички актуални правила за контрол на доÑтъпа. Можете да Ñ Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°Ñ‚Ðµ за бързо изтриване или промÑна на множеÑтво правила.
+
+Четене на [[doku>acl|ACL документациÑта]] може да ви помогне да разберете напълно как работи контрола на доÑтъпа в DokuWiki. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/bg/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/bg/lang.php
new file mode 100644
index 000000000..9facd4259
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/bg/lang.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * bulgarian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Nikolay Vladimirov <nikolay@vladimiroff.com>
+ * @author Viktor Usunov <usun0v@mail.bg>
+ */
+$lang['admin_acl'] = 'Управление на ÑпиÑъците за доÑтъп';
+$lang['acl_group'] = 'Група';
+$lang['acl_user'] = 'Потребител';
+$lang['acl_perms'] = 'Права за';
+$lang['page'] = 'Страница';
+$lang['namespace'] = 'Именно проÑтранÑтво';
+$lang['btn_select'] = 'Избери';
+$lang['p_user_id'] = 'ПотребителÑÑ‚ <b class="acluser">%s</b> има в момента Ñледните права за Ñтраницата <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'ПотребителÑÑ‚ <b class="acluser">%s</b> има в момента Ñледните права в именното проÑтранÑтво <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Членове на групата <b class="aclgroup">%s</b> имат в момента Ñледните права за Ñтраницата <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Членове на групата <b class="aclgroup">%s</b> имат в момента Ñледните права в именното проÑтранÑтво <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'ÐœÐ¾Ð»Ñ <b>въведете потребител или група</b> в полето горе, за да видите или промените правата за Ñтраницата <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'ÐœÐ¾Ð»Ñ <b>въведете потребител или група</b> в полето горе, за да видите или промените правата за именното проÑтранÑтво <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Забележка: Тези Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ðµ Ñа определени изрично, но Ñа били наÑледени от други групи или именни проÑтранÑтва.';
+$lang['p_isadmin'] = 'Забележка: Избраните група или потребител притежават пълни права, Ñпоред конфигурациÑта им.';
+$lang['p_include'] = 'ВиÑши Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡Ð²Ð°Ñ‚ по-ниÑши такива. Създаване или премахване на Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ñе прилага Ñамо за именни проÑтранÑтва, не за Ñтраници.';
+$lang['current'] = 'Текущи ACL права';
+$lang['where'] = 'Страница/Именно поÑтранÑтво';
+$lang['who'] = 'Потребител/Група';
+$lang['perm'] = 'Права';
+$lang['acl_perm0'] = 'Ðикакви';
+$lang['acl_perm1'] = 'Четене';
+$lang['acl_perm2'] = 'Редактиране';
+$lang['acl_perm4'] = 'Създаване';
+$lang['acl_perm8'] = 'Качване';
+$lang['acl_perm16'] = 'Изтриване';
+$lang['acl_new'] = 'ДобавÑне на ново';
+$lang['acl_mod'] = 'ПромÑна на впиÑване';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/help.txt
new file mode 100644
index 000000000..87450d2fa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/help.txt
@@ -0,0 +1,15 @@
+=== Ajuda ràpida: ===
+
+En esta pàgina pot afegir i llevar permissos per a espais de noms i
+pàgines del wiki.
+
+El panel esquerre mostra tots els espais de noms i pàgines disponibles.
+
+El formulari de dalt permet vore i modificar els permissos de l'usuari
+o grup seleccionat.
+
+En la taula de baix es mostren totes les regles d'accés actuals. Pot
+usar-la per a canviar o borrar ràpidament vàries regles.
+
+Llegint la [[doku>acl|documentació oficial sobre ACL]] podrà
+comprendre millor com funciona el control d'accés en DokuWiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/lang.php
new file mode 100644
index 000000000..ef0ae92eb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/lang.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * valencian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Bernat Arlandis i Mañó <berarma@ya.com>
+ * @author Bernat Arlandis <berarma@ya.com>
+ * @author Bernat Arlandis <berarma@llenguaitecnologia.com>
+ */
+$lang['admin_acl'] = 'Gestor de les llistes de control d\'accés';
+$lang['acl_group'] = 'Grup';
+$lang['acl_user'] = 'Usuari';
+$lang['acl_perms'] = 'Permissos per a';
+$lang['page'] = 'Pàgina';
+$lang['namespace'] = 'Espai de noms';
+$lang['btn_select'] = 'Seleccionar';
+$lang['p_user_id'] = 'L\'usuari <b class="acluser">%s</b> té actualment els següents permissos en la pàgina <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'L\'usuari <b class="acluser">%s</b> té actualment els següents permissos en l\'espai de noms <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Els membres del grup <b class="aclgroup">%s</b> tenen actualment els següents permissos en la pàgina <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Els membres del grup <b class="aclgroup">%s</b> tenen actualment els següents permissos en l\'espai de noms <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Per favor, <b>introduïxca un usuari o grup</b> en el formulari de dalt per a vore o editar els per a la pàgina <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Per favor, <b>introduïxca un usuari o grup</b> en el formulari de dalt per a vore o editar els permissos per a l\'espai de noms <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Nota: estos permissos no s\'han indicat explícitament sino que s\'hereten d\'atres grups o d\'espais de noms antecessors.';
+$lang['p_isadmin'] = 'Nota: el grup o usuari seleccionat té sempre tots els permissos perque està configurat com a super-usuari.';
+$lang['p_include'] = 'Els permissos més alts inclouen als més baixos. Els permissos per a crear, enviar i borrar només valen per a espais de noms, pàgines no.';
+$lang['current'] = 'Regles ACL actuals';
+$lang['where'] = 'Pàgina/espai de noms';
+$lang['who'] = 'Usuari/grup';
+$lang['perm'] = 'Permissos';
+$lang['acl_perm0'] = 'Cap';
+$lang['acl_perm1'] = 'Llegir';
+$lang['acl_perm2'] = 'Editar';
+$lang['acl_perm4'] = 'Crear';
+$lang['acl_perm8'] = 'Pujar';
+$lang['acl_perm16'] = 'Borrar';
+$lang['acl_new'] = 'Afegir entrada nova';
+$lang['acl_mod'] = 'Modificar entrada';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca/help.txt
new file mode 100644
index 000000000..d9bcc126d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca/help.txt
@@ -0,0 +1,11 @@
+=== Ajuda ràpida ===
+
+En aquesta pàgina podeu afegir i treure permisos per a espais i pàgines del vostre wiki.
+
+La subfinestra de l'esquerra mostra tots els espais i pàgines disponibles.
+
+El formulari de dalt us permet veure i modificar els permisos de l'usuari o grup que seleccioneu.
+
+En la taula de baix es mostren totes les regles de control d'accés que hagin estat definides. Podeu utilitzar aquesta taula per suprimir o modificar ràpidament totes les regles que vulgueu.
+
+Llegir la [[doku>acl|documentació oficial sobre ACL]] us pot ajudar a entendre del tot com funciona el control d'accés en DokuWiki. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca/lang.php
new file mode 100644
index 000000000..10f656062
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca/lang.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * catalan language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Carles Bellver <carles.bellver@cent.uji.es>
+ * @author Carles Bellver <carles.bellver@gmail.com>
+ * @author carles.bellver@gmail.com
+ * @author carles.bellver@cent.uji.es
+ */
+$lang['admin_acl'] = 'Gestió de la Llista de Control d\'Accés';
+$lang['acl_group'] = 'Grup';
+$lang['acl_user'] = 'Usuari';
+$lang['acl_perms'] = 'Permisos per a';
+$lang['page'] = 'Pàgina';
+$lang['namespace'] = 'Espai';
+$lang['btn_select'] = 'Selecciona';
+$lang['p_user_id'] = 'L\'usuari <b class="acluser">%s</b> té a hores d\'ara els permisos següents en la pàgina <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'L\'usuari <b class="acluser">%s</b> té a hores d\'ara els permisos següents en l\'espai <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Els membres del grup <b class="aclgroup">%s</b> tenen a hores d\'ara els permisos següents en la pàgina <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Els membres del grup <b class="aclgroup">%s</b> tenen a hores d\'ara els permisos següents en l\'espai <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = '<b>Introduïu un usuari o grup</b> en el formulari de dalt per veure o editar els seus permisos en la pàgina <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = '<b>Introduïu un usuari o grup</b> en el formulari de dalt per veure o editar els seus permisos en l\'espai <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Nota: aquests permisos no s\'han definit explícitament, sinó que són heretats d\'altres grups o d\'espais d\'ordre superior.';
+$lang['p_isadmin'] = 'Nota: l\'usuari o grup seleccionat té sempre tots els permisos perquè ha estat configurat com a superusuari.';
+$lang['p_include'] = 'Els permisos més alts inclouen tots els permisos inferiors. Els permisos per a crear, penjar i suprimir només s\'apliquen als espais, no a pàgines.';
+$lang['current'] = 'Regles ACL actuals';
+$lang['where'] = 'Pàgina/espai';
+$lang['who'] = 'Usuari/grup';
+$lang['perm'] = 'Permisos';
+$lang['acl_perm0'] = 'Cap';
+$lang['acl_perm1'] = 'Lectura';
+$lang['acl_perm2'] = 'Edició';
+$lang['acl_perm4'] = 'Creació';
+$lang['acl_perm8'] = 'Penjar fitxers';
+$lang['acl_perm16'] = 'Suprimir';
+$lang['acl_new'] = 'Afegeix nova entrada';
+$lang['acl_mod'] = 'Modifica entrada';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/cs/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/cs/help.txt
new file mode 100644
index 000000000..1dbc88ad0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/cs/help.txt
@@ -0,0 +1,11 @@
+=== Nápověda: ===
+
+Na této stránce můžete přidávat a odebírat oprávnění na jmenné prostory a stránky Vaší wiki.
+
+Levý panel zobrazuje všechny dostupné jmenné prostory a stránky.
+
+Formulář výše umožňuje vidět a modifikovat oprávnění vybraného uživatele nebo skupiny.
+
+V tabulce uvedené níže jsou zobrazeny všechny aktuální pravidla pro řízení přístupu (oprávnění). Zde můžete rychle odebírat a měnit více položek (oprávnění) najednou.
+
+Pro detailnÄ›jší nápovÄ›du si pÅ™eÄtÄ›te stránku [[doku>acl|oficiální dokumentaci ACL]], která Vám může pomoci plnÄ› pochopit princip, jak řízení přístupu na DokuWiki funguje.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/cs/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/cs/lang.php
new file mode 100644
index 000000000..899d30ced
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/cs/lang.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Czech language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Bohumir Zamecnik <bohumir@zamecnik.org>
+ * @author Zbynek Krivka <zbynek.krivka@seznam.cz>
+ * @author tomas@valenta.cz
+ */
+$lang['admin_acl'] = 'Správa přístupových práv';
+$lang['acl_group'] = 'Skupina';
+$lang['acl_user'] = 'Uživatel';
+$lang['acl_perms'] = 'Práva pro';
+$lang['page'] = 'Stránka';
+$lang['namespace'] = 'Jmenný prostor';
+$lang['btn_select'] = 'Vybrat';
+$lang['p_user_id'] = 'Uživatel <b class="acluser">%s</b> má nyní na stránku <b class="aclpage">%s</b> následující oprávnění: <i>%s</i>.';
+$lang['p_user_ns'] = 'Uživatel <b class="acluser">%s</b> má nyní na jmenný prostor <b class="aclns">%s</b> následující oprávnění: <i>%s</i>.';
+$lang['p_group_id'] = 'Členové skupiny <b class="aclgroup">%s</b> mají nyní na stránku <b class="aclpage">%s</b> následující oprávnění: <i>%s</i>.';
+$lang['p_group_ns'] = 'Členové skupiny <b class="aclgroup">%s</b> mají nyní na jmenný prostor <b class="aclns">%s</b> následující oprávnění: <i>%s</i>.';
+$lang['p_choose_id'] = 'Prosím, <b>vložte uživatele nebo skupinu</b> ve formě uvedené výše, abyste mohli prohlížet a editovat množinu oprávnění pro stránku <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Prosím, <b>vložte uživatele nebo skupinu</b> ve formě uvedené výše, abyste mohli prohlížet a editovat množinu oprávnění pro jmenný prostor <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Poznámka: Tato oprávnění nebyla nastavena explicitně, ale jsou zděděna z jiné skupiny nebo z nadřazeného jmenného prostoru.';
+$lang['p_isadmin'] = 'Poznámka: Vybraná skupina nebo uživatel má vždy plná oprávnění, protože je nastaven jako správce (superuser).';
+$lang['p_include'] = 'Vyšší oprávnění zahrnují nižší oprávnění. Vytvořit, Nahrát a Smazat se vztahují jen k jmenným prostorů, nikoliv ke stránkám.';
+$lang['current'] = 'Aktuální ACL pravidla';
+$lang['where'] = 'Stránka/Jmenný prostor';
+$lang['who'] = 'Uživatel/Skupina';
+$lang['perm'] = 'Oprávnění';
+$lang['acl_perm0'] = 'Žádné';
+$lang['acl_perm1'] = 'Čtení';
+$lang['acl_perm2'] = 'Úpravy';
+$lang['acl_perm4'] = 'Vytvoření';
+$lang['acl_perm8'] = 'Upload';
+$lang['acl_perm16'] = 'Mazání';
+$lang['acl_new'] = 'Přidat novou položku';
+$lang['acl_mod'] = 'Editovat položku';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/da/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/da/help.txt
new file mode 100644
index 000000000..c8eedfc48
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/da/help.txt
@@ -0,0 +1,11 @@
+=== Vejledning ===
+
+På denne side kan du tilføje og fjerne tilladelser for navnerum og sider i din wiki.
+
+Panelet i venstre side viser alle tilgængelige navnerum og sider.
+
+I kassen for oven giver dig mulighed for at se og ændre tilladelser for en bestemt bruger eller gruppe.
+
+Nedenstående skema viser dig alle de satte regler for adgangskontrol. Du kan bruge den til hurtigt at slette eller ændre nogle af dem.
+
+Ved at læse [[doku>acl|den officielle vejledning til ACL]] kan du opnå yderligere hjælp til at blive sat helt ind i, hvordan adgangskontrol virker i DokuWiki. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/da/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/da/lang.php
new file mode 100644
index 000000000..c95ff1582
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/da/lang.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Danish language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author koeppe <koeppe@kazur.dk>
+ * @author Jon Bendtsen <bendtsen@diku.dk>
+ * @author Lars Næsbye Christensen <larsnaesbye@stud.ku.dk>
+ * @author Kalle Sommer Nielsen <kalle@php.net>
+ * @author Esben Laursen <hyber@hyber.dk>
+ * @author Harith <haj@berlingske.dk>
+ * @author Daniel Ejsing-Duun <dokuwiki@zilvador.dk>
+ * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
+ */
+$lang['admin_acl'] = 'Rettighedsadministration';
+$lang['acl_group'] = 'Gruppe';
+$lang['acl_user'] = 'Bruger';
+$lang['acl_perms'] = 'Rettigheder for';
+$lang['page'] = 'Dokument';
+$lang['namespace'] = 'Navnerum';
+$lang['btn_select'] = 'Vælg';
+$lang['p_user_id'] = 'Bruger <b class="acluser">%s</b> har følgende adgang på siden <b class="aclpage">%s</b>: <i>%s</i>';
+$lang['p_user_ns'] = 'Bruger <b class="acluser">%s</b> har foreløbig følgende tilladelse i navnerummet <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Medlemmerne af gruppen <b class="aclgroup">%s</b> har foreløbigt de følgende tilladelser på siden <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Medlemmerne af gruppen <b class="aclgroup">%s</b> har foreløbigt de følgende tilladelser i navnerummet <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Venligst <b>udfyld en bruger eller gruppe</b> i ovennævnte formular for at se eller redigere tilladelserne for denne side<b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Venligst <b>udfyld en bruger eller gruppe</b> i ovennævnte formular for at se eller redigere tilladelserne for navnerummet <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Bemærk: Disse tilladelser var ikke lagt entydigt ind, men var arvet fra andre grupper eller højere navnerum.';
+$lang['p_isadmin'] = 'Bemærk: Den valgte gruppe eller bruger har altid fuld adgang, fordi den er sat til at være en supergruppe eller -bruger';
+$lang['p_include'] = 'Højere tilladelse inkluderer også lavere. Tilladelser til at oprette, lægge filer op og slette gælder kun for navnerum, ikke sider.';
+$lang['current'] = 'Aktuelle ACL-regler';
+$lang['where'] = 'Side/navnerum';
+$lang['who'] = 'Bruger/gruppe';
+$lang['perm'] = 'Adgangsniveau';
+$lang['acl_perm0'] = 'Ingen';
+$lang['acl_perm1'] = 'Læs';
+$lang['acl_perm2'] = 'Skriv';
+$lang['acl_perm4'] = 'Opret';
+$lang['acl_perm8'] = 'Overføre';
+$lang['acl_perm16'] = 'Slet';
+$lang['acl_new'] = 'Tilføj ny post';
+$lang['acl_mod'] = 'Ændre post';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/help.txt
new file mode 100644
index 000000000..d7930f8df
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/help.txt
@@ -0,0 +1,11 @@
+=== Schnellhilfe ===
+
+Auf dieser Seite kannst Du Rechte für Namensräume und Seiten in deinem Wiki hinzufügen oder entfernen.
+
+Der linke Bereich zeigt alle Namensräume und Seiten.
+
+Das obere Formular zeigt die die Rechte der ausgewählten Gruppe bzw. Benutzers.
+
+In der Tabelle unten werden alle momentan gesetzten Zugriffsregeln gezeigt. Hier kannst Du schnell mehrere Regeln löschen oder ändern.
+
+Das Lesen von [[doku>acl|official documentation on ACL]] kann Dir helfen zu verstehen, wie die Zugriffskontrole in DokuWiki funktioniert.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/lang.php
new file mode 100644
index 000000000..56dedfc61
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/lang.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * German (informal) language file
+ *
+ * @author Alexander Fischer <tbanus@os-forge.net>
+ * @author Juergen Schwarzer <jschwarzer@freenet.de>
+ */
+$lang['admin_acl'] = 'Zugriffskontrollsystem Management';
+$lang['acl_group'] = 'Gruppe';
+$lang['acl_user'] = 'Benutzer';
+$lang['acl_perms'] = 'Rechte für';
+$lang['page'] = 'Seite';
+$lang['namespace'] = 'Namensraum';
+$lang['btn_select'] = 'Auswählen';
+$lang['p_user_id'] = 'Benutzer <b class="acluser">%s</b> hat im Moment folgende Rechte auf der Seite <b class="aclpage">%s</b>: <i>%s</i>';
+$lang['p_user_ns'] = 'Benutzer <b class="acluser">%s</b> hat momentan die folgenden Rechte im Namensraum<b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Die Gruppenmitglieder <b class="aclgroup">%s</b> haben momentan die folgenden Rechte auf der Seite <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Die Mitglieder der Gruppe <b class="aclgroup">%s</b> haben gerade Zugriff in folgenden Namensräumen <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Bitte <b>gib einen Nutzer oder eine Gruppe</b> in das Formular ein, um die Berechtigungen der Seite<b class="aclpage">%s</b> anzusehen oder zu bearbeiten.';
+$lang['p_choose_ns'] = 'Bitte <b>gib einen Nutzer oder eine Gruppe</b> in das Formular ein, um die Berechtigungen des Namenraumes<b class="aclpage">%s</b> anzusehen oder zu bearbeiten.';
+$lang['p_inherited'] = 'Hinweis: Diese Rechte wuredn nicht explizit gesetzt sondern geerbt von anderen Grupen oder übergeordneten Namensräumen.';
+$lang['p_isadmin'] = 'Hinweis: Die gewählte Gruppe oder der Benutzer haben immer die vollen Rechte, weil sie als Superuser konfiguriert sind.';
+$lang['p_include'] = 'Höhere Rechte schließen kleinere mit ein. Hochlade- und Loeschrechte sind nur fuer Namensräume, nicht fuer Seiten.';
+$lang['current'] = 'Momentane Zugriffsregeln';
+$lang['where'] = 'Seite/Namensraum';
+$lang['who'] = 'Benutzer/Gruppe';
+$lang['perm'] = 'Rechte';
+$lang['acl_perm0'] = 'Keine';
+$lang['acl_perm1'] = 'Lesen';
+$lang['acl_perm2'] = 'Editieren';
+$lang['acl_perm4'] = 'Erstellen';
+$lang['acl_perm8'] = 'Hochladen';
+$lang['acl_perm16'] = 'Löschen';
+$lang['acl_new'] = 'Neuen Eintrag zufügen';
+$lang['acl_mod'] = 'Eintrag modifizieren';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de/help.txt
new file mode 100644
index 000000000..783ae22e7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de/help.txt
@@ -0,0 +1,11 @@
+=== Kurzhilfe ===
+
+Auf dieser Seite können sie Zugriffsberechtigungen für Seiten und Namensräume festlegen und ändern.
+
+Die Liste links zeigt alle verfügbaren Namensräume und Seiten.
+
+Das Formular oben erlaubt Anzeige, Ändern und Hinzufügen von Zugriffsregeln für einen ausgewählten Nutzer oder eine Gruppe.
+
+In der Tabelle unten werden alle bestehenden Regeln aufgeführt und können dort modifiziert oder gelöscht werden.
+
+Für ein tiefergehendes Verständnis wie Zugriffsbeschränkungen in DokuWiki funktionieren, sollten Sie die [[doku>acl|offizielle Dokumentation]] lesen. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de/lang.php
new file mode 100644
index 000000000..022ea6683
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de/lang.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * german language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Christof <gagi@fin.de>
+ * @author Anika Henke <anika@selfthinker.org>
+ * @author Esther Brunner <esther@kaffeehaus.ch>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @author Michael Klier <chi@chimeric.de>
+ * @author Leo Moll <leo@yeasoft.com>
+ * @author Florian Anderiasch <fa@art-core.org>
+ * @author Robin Kluth <commi1993@gmail.com>
+ * @author Arne Pelka <mail@arnepelka.de>
+ * @author Dirk Einecke <dirk@dirkeinecke.de>
+ * @author Blitzi94@gmx.de
+ * @author Robert Bogenschneider <robog@GMX.de>
+ */
+$lang['admin_acl'] = 'Zugangsverwaltung';
+$lang['acl_group'] = 'Gruppe';
+$lang['acl_user'] = 'Benutzer';
+$lang['acl_perms'] = 'Berechtigungen für';
+$lang['page'] = 'Seite';
+$lang['namespace'] = 'Namensraum';
+$lang['btn_select'] = 'Auswählen';
+$lang['p_user_id'] = 'Nutzer <b class="acluser">%s</b> hat momentan folgende Berechtigungen für die Seite <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Nutzer <b class="acluser">%s</b> hat momentan folgende Berechtigungen im Namensraum <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Mitglieder der Gruppe <b class="aclgroup">%s</b> haben momentan folgende Berechtigungen für die Seite <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Mitglieder der Gruppe <b class="aclgroup">%s</b> haben momentan folgende Berechtigungen für den Namensraum <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Bitte geben Sie in obigem Formular eine <b>einen Nutzer oder eine Gruppe</b> an, um die Berechtigungen für die Seite <b class="aclpage">%s</b> zu sehen oder zu ändern.';
+$lang['p_choose_ns'] = 'Bitte geben Sie in obigem Formular eine <b>einen Nutzer oder eine Gruppe</b> an, um die Berechtigungen für den Namensraum <b class="aclns">%s</b> zu sehen oder zu ändern.';
+$lang['p_inherited'] = 'Hinweis: Diese Berechtigungen wurden nicht explizit gesetzt sondern von anderen Gruppen oder höher liegenden Namensräumen geerbt.';
+$lang['p_isadmin'] = 'Hinweis: Die ausgewählte Gruppe oder Nutzer haben immer alle Berechtigungen das sie als Superuser konfiguriert wurden.';
+$lang['p_include'] = 'Höhere Berechtigungen schließen niedrigere mit ein. Anlegen, Hochladen und Entfernen gilt nur für Namensräume, nicht für einzelne Seiten';
+$lang['current'] = 'Momentane Zugriffsregeln';
+$lang['where'] = 'Seite/Namensraum';
+$lang['who'] = 'Nutzer/Gruppe';
+$lang['perm'] = 'Berechtigungen';
+$lang['acl_perm0'] = 'Keine';
+$lang['acl_perm1'] = 'Lesen';
+$lang['acl_perm2'] = 'Bearbeiten';
+$lang['acl_perm4'] = 'Anlegen';
+$lang['acl_perm8'] = 'Hochladen';
+$lang['acl_perm16'] = 'Entfernen';
+$lang['acl_new'] = 'Eintrag hinzufügen';
+$lang['acl_mod'] = 'Eintrag bearbeiten';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/el/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/el/help.txt
new file mode 100644
index 000000000..ea2f816c0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/el/help.txt
@@ -0,0 +1,10 @@
+=== ΓÏήγοÏη Βοήθεια: ===
+
+Στη σελίδα αυτή μποÏείτε να Ï€Ïοσθέσετε και αφαιÏέσετε δικαιώματα Ï€Ïόσβασης για φακέλους και σελίδες στο wiki σας.
+
+Το αÏιστεÏÏŒ πλαίσιο δείχνει όλους τους διαθέσιμους φακέλους και αÏχεία.
+
+Η παÏαπάνω φόÏμα επιτÏέπει να δείτε και να Ï„Ïοποποιήσετε τα διακαιώματα μίας επιλεγμένης ομάδας χÏηστών ή ενός χÏήστη.
+
+Στον παÏακάτω πίνακα εμφανίζονται όλοι οι Ï„Ïέχοντες κανόνες παÏαχώÏησης δικαιωμάτων Ï€Ïόσβασης. ΜποÏείτε να τον χÏησιμοποιήσετε ώστε να σβήσετε ή να Ï„Ïοποποιήσετε γÏήγοÏα πολλαπλοÏÏ‚ κανόνες.
+Διαβάζοντας την [[doku>acl|επίσημη τεκμηÏίωση για τις Λίστες Δικαιωμάτων ΠÏόσβασης - ACL]] ίσως σας βοηθήσει να καταλάβετε πλήÏως το πως αυτές εφαÏμόζονται στην DokuWiki. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/el/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/el/lang.php
new file mode 100644
index 000000000..da8a72ab3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/el/lang.php
@@ -0,0 +1,43 @@
+<?php
+/**
+ * Greek language file
+ *
+ * Based on DokuWiki Version rc2007-05-24 english language file
+ * Original english language file contents included for reference
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Anika Henke <anika@selfthinker.org>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @author Thanos Massias <tm@thriasio.gr>
+ * @author Αθανάσιος Îταής <homunculus@wana.gr>
+ * @author Konstantinos Koryllos <koryllos@gmail.com>
+ */
+$lang['admin_acl'] = 'ΔιαχείÏιση Δικαιωμάτων ΠÏόσβασης';
+$lang['acl_group'] = 'Ομάδα';
+$lang['acl_user'] = 'ΧÏήστης';
+$lang['acl_perms'] = 'Δικαιώματα για';
+$lang['page'] = 'Σελίδα';
+$lang['namespace'] = 'Φάκελος';
+$lang['btn_select'] = 'Επιλογή';
+$lang['p_user_id'] = 'Ο χÏήστης <b class="acluser">%s</b> έχει τα ακόλουθα δικαιώματα Ï€Ïόσβασης στην σελίδα <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Ο χÏήστης <b class="acluser">%s</b> έχει τα ακόλουθα δικαιώματα Ï€Ïόσβασης στον φάκελο <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Τα μέλη της ομάδας <b class="aclgroup">%s</b> έχουν τα ακόλουθα δικαιώματα Ï€Ïόσβασης στην σελίδα <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Τα μέλη της ομάδας <b class="aclgroup">%s</b> έχουν τα ακόλουθα δικαιώματα Ï€Ïόσβασης στον φάκελο <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'ΠαÏακαλώ <b>δώστε ένα όνομα χÏήστη ή ομάδας χÏηστών</b> στην παÏαπάνω μοÏφή για να δείτε τα αντίστοιχα δικαιώματα Ï€Ïόσβασης για την σελίδα <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'ΠαÏακαλώ <b>δώστε ένα όνομα χÏήστη ή ομάδας χÏηστών</b> στην παÏαπάνω μοÏφή για να δείτε τα αντίστοιχα δικαιώματα Ï€Ïόσβασης για τον φάκελο <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Σημείωση: Αυτά τα διακαιώματα χÏήσης δεν οÏίστηκαν άμεσα αλλά κληÏονομήθηκαν από άλλες ομάδες χÏηστών ή φακέλους σε υψηλότεÏο επίπεδο.';
+$lang['p_isadmin'] = 'Σημείωση: Η επιλεγμένη ομάδα χÏηστών ή χÏήστης έχει πάντα πλήÏη διακαιώματα Ï€Ïόσβασης διότι είναι δηλωμένος σαν υπεÏχÏήστης (superuser).';
+$lang['p_include'] = 'Τα υψηλότεÏα δικαιώματα Ï€Ïόσβασης πεÏιλαμβάνουν τα χαμηλότεÏα. Τα δικαιώματα για ΔημιουÏγία, ΦόÏτωση και ΔιαγÏαφή αφοÏοÏν μόνο φακέλους και όχι σελίδες. ';
+$lang['current'] = 'ΤÏέχοντες κανόνες Λίστας Δικαιωμάτων ΠÏόσβασης - ACL';
+$lang['where'] = 'Σελίδα/Φάκελος';
+$lang['who'] = 'ΧÏήστης/Ομάδα χÏηστών';
+$lang['perm'] = 'Δικαιώματα Ï€Ïόσβασης';
+$lang['acl_perm0'] = 'Κανένα';
+$lang['acl_perm1'] = 'Ανάγνωση';
+$lang['acl_perm2'] = 'ΤÏοποποίηση';
+$lang['acl_perm4'] = 'ΔημιουÏγία';
+$lang['acl_perm8'] = 'ΦόÏτωση';
+$lang['acl_perm16'] = 'ΔιαγÏαφή';
+$lang['acl_new'] = 'ΠÏοσθήκη νέας εγγÏαφής';
+$lang['acl_mod'] = 'ΤÏοποποίηση εγγÏαφής';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/en/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/en/help.txt
new file mode 100644
index 000000000..2b80cc4c7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/en/help.txt
@@ -0,0 +1,12 @@
+=== Quick Help: ===
+
+On this page you can add and remove permissions for namespaces and pages in your wiki.
+
+The left pane displays all available namespaces and pages.
+
+The form above allows you to see and modify the permissions of a selected user or group.
+
+In the table below all currently set access control rules are shown. You can use it to quickly delete or change multiple rules.
+
+Reading the [[doku>acl|official documentation on ACL]] might help you to fully understand how access control works in DokuWiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/en/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/en/lang.php
new file mode 100644
index 000000000..38ff20c88
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/en/lang.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * english language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Anika Henke <anika@selfthinker.org>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+
+$lang['admin_acl'] = 'Access Control List Management';
+$lang['acl_group'] = 'Group';
+$lang['acl_user'] = 'User';
+$lang['acl_perms'] = 'Permissions for';
+$lang['page'] = 'Page';
+$lang['namespace'] = 'Namespace';
+
+$lang['btn_select'] = 'Select';
+
+$lang['p_user_id'] = 'User <b class="acluser">%s</b> currently has the following permissions on page <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'User <b class="acluser">%s</b> currently has the following permissions in namespace <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Members of group <b class="aclgroup">%s</b> currently have the following permissions on page <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Members of group <b class="aclgroup">%s</b> currently have the following permissions in namespace <b class="aclns">%s</b>: <i>%s</i>.';
+
+$lang['p_choose_id'] = 'Please <b>enter a user or group</b> in the form above to view or edit the permissions set for the page <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Please <b>enter a user or group</b> in the form above to view or edit the permissions set for the namespace <b class="aclns">%s</b>.';
+
+
+$lang['p_inherited'] = 'Note: Those permissions were not set explicitly but were inherited from other groups or higher namespaces.';
+$lang['p_isadmin'] = 'Note: The selected group or user has always full permissions because it is configured as superuser.';
+$lang['p_include'] = 'Higher permissions include lower ones. Create, Upload and Delete permissions only apply to namespaces, not pages.';
+
+$lang['current'] = 'Current ACL Rules';
+$lang['where'] = 'Page/Namespace';
+$lang['who'] = 'User/Group';
+$lang['perm'] = 'Permissions';
+
+$lang['acl_perm0'] = 'None';
+$lang['acl_perm1'] = 'Read';
+$lang['acl_perm2'] = 'Edit';
+$lang['acl_perm4'] = 'Create';
+$lang['acl_perm8'] = 'Upload';
+$lang['acl_perm16'] = 'Delete';
+$lang['acl_new'] = 'Add new Entry';
+$lang['acl_mod'] = 'Modify Entry';
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eo/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eo/help.txt
new file mode 100644
index 000000000..0c03b8605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eo/help.txt
@@ -0,0 +1,11 @@
+=== Helpeto: ===
+
+En tiu ĉi paÄo vi povas aldoni kaj forigi rajtojn por nomspacoj kaj paÄoj en via vikio.
+
+La maldekstra panelo montras ĉiujn disponeblajn nomspacojn kaj paÄojn.
+
+La suba agordilo permesas al vi rigardi kaj modifi la rajtojn de elektita uzanto aÅ­ grupo.
+
+En la suba tabelo ĉiuj aktuale difinitaj alirkontrolaj reguloj estas montritaj. Vi povas uzi Äin por rapide forigi aÅ­ ÅanÄi multoblajn regulojn.
+
+Legado de la [[doku>acl|oficiala dokumentaro pri ACL]] povus helpi vin bone kompreni kiel alirkontrolo funkcias en DokuWiki. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eo/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eo/lang.php
new file mode 100644
index 000000000..97a07c3c9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eo/lang.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * Esperantolanguage file
+ *
+ * @author Felipe Castro <fefcas@uol.com.br>
+ * @author Felipo Kastro <fefcas@gmail.com>
+ * @author Felipe Castro <fefcas@gmail.com>
+ * @author Robert Bogenschneider <robog@gmx.de>
+ * @author Erik Pedersen <erik pedersen@shaw.ca>
+ * @author Erik Pedersen <erik.pedersen@shaw.ca>
+ * @author Robert Bogenschneider <robog@GMX.de>
+ */
+$lang['admin_acl'] = 'Administrado de Alirkontrola Listo (ACL)';
+$lang['acl_group'] = 'Grupo';
+$lang['acl_user'] = 'Uzanto';
+$lang['acl_perms'] = 'Rajtoj por';
+$lang['page'] = 'PaÄo';
+$lang['namespace'] = 'Nomspaco';
+$lang['btn_select'] = 'Elekti';
+$lang['p_user_id'] = 'Uzanto <b class="acluser">%s</b> aktuale havas la jenajn rajtojn en la paÄo <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Uzanto <b class="acluser">%s</b> aktuale havas la jenajn rajtojn en la nomspaco <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Anoj de la grupo <b class="aclgroup">%s</b> aktuale havas la jenajn rajtojn en la paÄo <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Anoj de la grupo <b class="aclgroup">%s</b> aktuale havas la jenajn rajtojn en la nomspaco <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Bonvole <b>enmeti uzanton aÅ­ grupon</b> en la suba agordilo por rigardi aÅ­ redakti la aron da rajtoj por la paÄo <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Bonvole <b>enmeti uzanton aÅ­ grupon</b> en la suba agordilo por rigardi aÅ­ redakti la aron da rajtoj por la nomspaco <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Rimarko: tiuj rajtoj ne estis rekte difinitaj, sed ili estis hereditaj el aliaj pli superaj grupoj aÅ­ nomspacoj.';
+$lang['p_isadmin'] = 'Rimarko: la elektita grupo aÅ­ uzanto ĉiam havas plenan rajtaron ĉar Äi estas difinita kiel superuzanto.';
+$lang['p_include'] = 'Plialtaj permesoj inkluzivas malpli altajn. La permesoj por Krei, AlÅuti kaj Forigi nur aplikeblas al nomspacoj, ne al paÄoj.';
+$lang['current'] = 'Aktuala regularo ACL';
+$lang['where'] = 'PaÄo/Nomspaco';
+$lang['who'] = 'Uzanto/Grupo';
+$lang['perm'] = 'Rajtoj';
+$lang['acl_perm0'] = 'Nenio';
+$lang['acl_perm1'] = 'Legi';
+$lang['acl_perm2'] = 'Redakti';
+$lang['acl_perm4'] = 'Krei';
+$lang['acl_perm8'] = 'AlÅuti';
+$lang['acl_perm16'] = 'Forigi';
+$lang['acl_new'] = 'Aldoni novan Enmetaĵon';
+$lang['acl_mod'] = 'Modifi Enmetaĵon';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/es/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/es/help.txt
new file mode 100644
index 000000000..c683477a8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/es/help.txt
@@ -0,0 +1,11 @@
+=== Ayuda rápida: ===
+
+En esta página puede agregar o retirar permisos para los espacios de nombres y páginas en su wiki.
+
+El panel de la izquierda muiestra todos los espacios de nombres y páginas
+
+El formulario inferior permite ver y modificar los permisos del usuario o grupo elegido.
+
+En la tabla anterior se muestran todas las reglas de control de acceso vigentes Puede usarla para borrar o cambiar varias reglas rápidamente.
+
+Consultar el [[doku>acl|official documentation on ACL]] puede ayudarle a entender completamente como el control de acceso trabaja en DokuWiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/es/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/es/lang.php
new file mode 100644
index 000000000..3a23c71da
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/es/lang.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Spanish language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Miguel Pagano <miguel.pagano@gmail.com>
+ * @author Oscar M. Lage <r0sk10@gmail.com>
+ * @author Gabriel Castillo <gch@pumas.ii.unam.mx>
+ * @author oliver@samera.com.py
+ * @author Enrico Nicoletto <liverig@gmail.com>
+ * @author Manuel Meco <manuel.meco@gmail.com>
+ * @author VictorCastelan <victorcastelan@gmail.com>
+ * @author Jordan Mero hack.jord@gmail.com
+ * @author Felipe Martinez <metalmartinez@gmail.com>
+ * @author Javier Aranda <internet@javierav.com>
+ * @author Zerial <fernando@zerial.org>
+ * @author Marvin Ortega <maty1206@maryanlinux.com>
+ * @author Daniel Castro Alvarado <dancas2@gmail.com>
+ * @author Fernando J. Gómez <fjgomez@gmail.com>
+ */
+$lang['admin_acl'] = 'Administración de lista de control de acceso';
+$lang['acl_group'] = 'Grupo';
+$lang['acl_user'] = 'Usuario';
+$lang['acl_perms'] = 'Permiso para';
+$lang['page'] = 'Página';
+$lang['namespace'] = 'Espacio de nombres';
+$lang['btn_select'] = 'Seleccionar';
+$lang['p_user_id'] = 'El usuario <b class="acluser">%s</b> tiene los siguientes permisos sobre la página <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'El usuario <b class="acluser">%s</b> tiene los siguientes permisos sobre el espacio de nombres <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Los miembros del grupo <b class="aclgroup">%s</b> tienen actualmente los siguientes permisos sobre la página <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Los miembros del grupo <b class="aclgroup">%s</b> tienen actualmente los siguientes permisos sobre el espacio de nombres <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Por favor <b>proporcione un usuario o grupo</b>en el formulario arriba mostrado para ver o editar los permisos asignados sobre la página<b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Por favor <b>proporcione un usuario o grupo</b>en el formulario arriba mostrado para ver o editar los permisos asignados sobre el espacio de nombres <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Nota: Esos permisos no fueron establecidos explícitamente sino que fueron heredados desde otros grupos o espacios de nombres superiores';
+$lang['p_isadmin'] = 'Nota: El grupo o usuario seleccionado simepre tiene permisos totales debido a que se encuentra configurado como superusuario.';
+$lang['p_include'] = 'Los permisos superiores incluyen a los inferiores. Los permisos Crear, Cargar y Eliminar sólo se aplican a los espacios de nombres, no a las páginas.';
+$lang['current'] = 'Reglas ACL vigentes';
+$lang['where'] = 'Página/Espacio de nombres';
+$lang['who'] = 'Usuario/Grupo';
+$lang['perm'] = 'Permisos';
+$lang['acl_perm0'] = 'ninguno';
+$lang['acl_perm1'] = 'Leer';
+$lang['acl_perm2'] = 'Editar';
+$lang['acl_perm4'] = 'Crear';
+$lang['acl_perm8'] = 'Subir un fichero';
+$lang['acl_perm16'] = 'Borrar';
+$lang['acl_new'] = 'Agregar una nueva entrada';
+$lang['acl_mod'] = 'Modificar una entrada';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/et/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/et/lang.php
new file mode 100644
index 000000000..e90d5eaa9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/et/lang.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * Estonian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Oliver S6ro <seem.iges@mail.ee>
+ * @author Aari Juhanson <aari@vmg.vil.ee>
+ * @author Kaiko Kaur <kaiko@kultuur.edu.ee>
+ */
+
+$lang['admin_acl'] = 'Ligipääsukontrolli nimekirja haldamine';
+$lang['acl_group'] = 'Grupp';
+$lang['acl_user'] = 'Kasutaja';
+$lang['acl_perms'] = 'Lubatud';
+$lang['page'] = 'leht';
+$lang['namespace'] = 'alajaotus';
+
+$lang['acl_perm1'] = 'Lugemine';
+$lang['acl_perm2'] = 'Toimetamine';
+$lang['acl_perm4'] = 'Tekitamine';
+$lang['acl_perm8'] = 'Ãœles laadimine';
+$lang['acl_new'] = 'Uue kirje lisamine';
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eu/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eu/help.txt
new file mode 100644
index 000000000..9e6070a10
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eu/help.txt
@@ -0,0 +1,11 @@
+=== Laguntza Bizkorra: ===
+
+Orri honetan wiki-ko orri eta izen-espazioen baimenak gehitu eta kendu ahal ditzakezu.
+
+Ezkerreko panelak eskuragarri dauden orri eta izen-espazioak erakusten ditu.
+
+Goiko formularioak aukeratutako erabiltzaile edo taldearen baimenak ikusi eta aldatzea ahalbidetzen dizu.
+
+Beheko taulan une honetan ezarritako atzipen kontrol arauak daude. Hainbat arau bizkor ezabatu edo aldatzeko erabili dezakezu.
+
+[[doku>acl|Atzipen Kontrol Listen inguruko dokumentazio ofiziala]] irakurtzeak atzipen kontrolak DokuWiki-n nola funtzionatzen duen ulertzen lagundu zaitzaike.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eu/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eu/lang.php
new file mode 100644
index 000000000..99e70ad00
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eu/lang.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * Basque language file
+ *
+ * @author Inko Illarramendi <inko.i.a@gmail.com>
+ */
+$lang['admin_acl'] = 'Atzipen Kontrol Listaren Kudeaketa';
+$lang['acl_group'] = 'Taldea';
+$lang['acl_user'] = 'Erabiltzailea';
+$lang['acl_perms'] = 'Baimenak honetarako:';
+$lang['page'] = 'Orria';
+$lang['namespace'] = 'Izen-espazioa';
+$lang['btn_select'] = 'Aukeratu';
+$lang['p_user_id'] = '<b class="acluser">%s</b> erabiltzaileak une honetan honako baimenak ditu <b class="aclpage">%s</b> orrian: <i>%s</i>.';
+$lang['p_user_ns'] = '<b class="acluser">%s</b> erabiltzaileak une honetan honako baimenak ditu <b class="aclns">%s</b> izen-espazioan: <i>%s</i>.';
+$lang['p_group_id'] = '<b class="aclgroup">%s</b> taldeko kideek une honetan honako baimenak dituzte <b class="aclpage">%s</b> orrian: <i>%s</i>.';
+$lang['p_group_ns'] = '<b class="aclgroup">%s</b> taldeko kideek une honetan honako baimenak dituzte <b class="aclns">%s</b> izen-espazioan: <i>%s</i>.';
+$lang['p_choose_id'] = 'Mesedez <b>sartu erabiltzaile edo taldea</b> goiko formularioan <b class="aclpage">%s</b> orrian ezarritako baimenak ikusi edo aldatzeko.';
+$lang['p_choose_ns'] = 'Mesedez <b>sartu erabiltzaile edo taldea</b> goiko formularioan <b class="aclns">%s</b> izen-espazioan ezarritako baimenak ikusi edo aldatzeko.';
+$lang['p_inherited'] = 'Oharra: Baimen horiek ez dira esplizituki jarriak, beste talde batzuetatik edo goragoko izen-espazioetatik heredatuak baizik.';
+$lang['p_isadmin'] = 'Oharra: Aukeratutako talde edo erabiltzaileak beti daika baimen osoa, supererabiltzaile gisa konfiguratuta baitago.';
+$lang['p_include'] = 'Baimen handiagoek baimen txikiagoak barneratzen dituzte. Sortu, Igo eta Ezabatu baimenak izen-espazioei soilik aplikatzen zaizkie, ez orriei.';
+$lang['current'] = 'Uneko AKL Arauak';
+$lang['where'] = 'Orria/Izen-espazioa';
+$lang['who'] = 'Erabiltzailea/Taldea';
+$lang['perm'] = 'Baimenak';
+$lang['acl_perm0'] = 'Inork';
+$lang['acl_perm1'] = 'Irakurri';
+$lang['acl_perm2'] = 'Editatu';
+$lang['acl_perm4'] = 'Sortu';
+$lang['acl_perm8'] = 'Igo';
+$lang['acl_perm16'] = 'Ezabatu';
+$lang['acl_new'] = 'Sarrera berri bat gehitu';
+$lang['acl_mod'] = 'Aldatu Sarrera';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fa/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fa/help.txt
new file mode 100644
index 000000000..1ec797faf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fa/help.txt
@@ -0,0 +1,11 @@
+=== راهنما: ===
+
+در این صÙحه شما می‌توانید دسترسی صÙحات Ùˆ Ùضای‌نام‌ها را مدیریت کنید.
+
+در قسمت سمت راست، لیست تمام صÙحات Ùˆ Ùضای‌نام‌ها را مشاهده می‌کنید.
+
+در Ùرم بالا می‌توانید دسترسی‌های کاربران Ùˆ گروه‌های مختل٠را مشاهده Ùˆ ویرایش کنید.
+
+در جدول زیر، تمامی قوانین مدیریتی را مشاهده می‌کنید. شما می‌توانید آن‌ها را حذ٠یا تعدادی از آن‌ها رو تغییر دهید.
+
+ممکن است خواندن [[doku>acl|مطلب رسمی در مورد مدیریت دسترسی‌ها]] شما را در درک بهتر این قسمت DokuWiki یاری کند. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fa/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fa/lang.php
new file mode 100644
index 000000000..ed576c271
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fa/lang.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * Persian language file
+ *
+ * @author behrad eslamifar <behrad_es@yahoo.com)
+ * @author Mohsen Firoozmandan <info@mambolearn.com>
+ * @author omidmr@gmail.com
+ * @author Omid Mottaghi <omidmr@gmail.com>
+ * @author Mohammad Reza Shoaei <shoaei@gmail.com>
+ */
+$lang['admin_acl'] = 'مدیریت کنترل دسترسی‌ها';
+$lang['acl_group'] = 'گروه';
+$lang['acl_user'] = 'کاربر';
+$lang['acl_perms'] = 'مجوز برای';
+$lang['page'] = 'صÙحه';
+$lang['namespace'] = 'Ùضای‌نام';
+$lang['btn_select'] = 'انتخاب';
+$lang['p_user_id'] = 'کاربر <b class="acluser">%s</b> دسترسی‌های زیر را برای صÙحه‌ی <b class="aclpage">%s</b> دارد: <i>%s</i>.';
+$lang['p_user_ns'] = 'کاربر <b class="acluser">%s</b> دسترسی‌های زیر را برای Ùضای‌نام <b class="aclpage">%s</b> دارد: <i>%s</i>.';
+$lang['p_group_id'] = 'اعضای گروه <b class="aclgroup">%s</b> دسترسی‌های زیر را برای صÙحه‌ی <b class="aclpage">%s</b> دارند: <i>%s</i>.';
+$lang['p_group_ns'] = 'اعضای گروه <b class="aclgroup">%s</b> دسترسی‌های زیر را برای Ùضای‌نام <b class="aclpage">%s</b> دارند: <i>%s</i>.';
+$lang['p_choose_id'] = 'خواهشمندیم <b>نام یک کاربر یا گروه</b> را در Ùرم بالا وارد کنید تا دسترسی‌های آن را برای صÙحه‌ی <b class="aclpage">%s</b> ببینید Ùˆ ویرایش کنید.';
+$lang['p_choose_ns'] = 'خواهشمندیم <b>نام یک کاربر یا گروه</b> را در Ùرم بالا وارد کنید تا دسترسی‌های آن را برای Ùضای‌نام <b class="aclpage">%s</b> ببینید Ùˆ ویرایش کنید.';
+$lang['p_inherited'] = 'توجه: دسترسی‌ها مستقیمن مقداردهی نشده است، بلکه از گروه‌های بالا یا Ùضای‌نام گرÙته شده است.';
+$lang['p_isadmin'] = 'توجه: کاربر یا گروه انتخاب شده همیشه با تمام دسترسی می‌باشد، زیرا به عنوان «superuser» انتخاب شده است.';
+$lang['p_include'] = 'دسترسی‌های بالا، دسترسی‌های پایین را شامل می‌شود. ایجاد، ارسال Ùˆ حذ٠Ùقط به Ùضای‌نام الحاق می‌شود.';
+$lang['current'] = 'قوانین دسترسی Ùعلی';
+$lang['where'] = 'صÙحه/Ùضای‌نام';
+$lang['who'] = 'کاربر/گروه';
+$lang['perm'] = 'دسترسی‌ها';
+$lang['acl_perm0'] = 'هیچ‌کدام';
+$lang['acl_perm1'] = 'خواندن';
+$lang['acl_perm2'] = 'ویزایش';
+$lang['acl_perm4'] = 'ایجاد';
+$lang['acl_perm8'] = 'ارسال';
+$lang['acl_perm16'] = 'حذÙ';
+$lang['acl_new'] = 'اضاÙÙ‡ کردن ورودی جدید';
+$lang['acl_mod'] = 'ویرایش ورودی';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fi/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fi/help.txt
new file mode 100644
index 000000000..d821f2d89
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fi/help.txt
@@ -0,0 +1,11 @@
+=== Pika-apu: ===
+
+Tällä sivulla voit lisätä tai poistaa oikeuksia wikisi nimiavaruuksiin tai sivuihin.
+
+Vasen osa näyttää kaikki tarjolla olevat nimiavaruudet ja sivut.
+
+Yllä olevan kaavakkeen avulla voit katsoa ja muokata oikeuksia valitulle käyttäjälle ja ryhmälle.
+
+Alla olevassa taulukossa on näkyvissä päällä olevat pääsyoikeudet. Voit käyttää sitä muokataksesi tai poistaaksesi useita oikeuksia.
+
+[[doku>acl|Virallisen käyttöoikeus (ACL) dokumentaation]] lukeminen voi helpottaa sinua täysin ymmärtämään mitän käyttöoikeudet toimivat DokuWikissä.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fi/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fi/lang.php
new file mode 100644
index 000000000..04074d8d4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fi/lang.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Finnish language file
+ *
+ * @author otto@valjakko.net
+ * @author Otto Vainio <otto@valjakko.net>
+ * @author Teemu Mattila <ghcsystems@gmail.com>
+ */
+$lang['admin_acl'] = 'Käyttöoikeudet (ACL)';
+$lang['acl_group'] = 'Ryhmä';
+$lang['acl_user'] = 'Käyttäjä';
+$lang['acl_perms'] = 'Oikeudet';
+$lang['page'] = 'Sivu';
+$lang['namespace'] = 'Nimiavaruus';
+$lang['btn_select'] = 'Valitse';
+$lang['p_user_id'] = 'Käyttäjällä <b class="acluser">%s</b> on tällä hetkellä seuraavat oikeudet sivulla <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Käyttäjällä <b class="acluser">%s</b> on tällä hetkellä seuraavat oikeudet nimiavaruudessa <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Ryhmän <b class="aclgroup">%s</b> jäsenillä on tällä hetkellä seuraavat oikeudet sivulla <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Ryhmän <b class="aclgroup">%s</b> jäsenillä on tällä hetkellä seuraavat oikeudet nimiavaruudessa <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Ole hyvä ja <b>syötä ryhmän nimi</b> yllä olevaan kaavakkeeseen katsoaksesi tai muokataksesi oikeuksia sivulle <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Ole hyvä ja <b>syötä ryhmän nimi</b> yllä olevaan kaavakkeeseen katsoaksesi tai muokataksesi oikeuksia nimiavaruuteen <b class="aclpage">%s</b>.';
+$lang['p_inherited'] = 'Huomaa: Oikeuksia ei ole erikseen asetettu, vaan ne on peritty toiselta ryhmältä tai ylemmältä nimiavaruudelta.';
+$lang['p_isadmin'] = 'Huomaa: Valitulla ryhmällä tai käyttäjällä on aina täydet oikeudet, koska se on määritelty pääkäyttäjäksi (Superuser)';
+$lang['p_include'] = 'Korkeammat oikeudet sisältävät matalammat. Luonti-, Lähetys- ja Poisto-oikeudet vaikuttavat vain nimiavaruuksiin, ei sivuihin.';
+$lang['current'] = 'Tämänhetkiset käyttöoikeudet (ACL)';
+$lang['where'] = 'Sivu/Nimiavaruus';
+$lang['who'] = 'Käyttäjä/Ryhmä';
+$lang['perm'] = 'Oikeudet';
+$lang['acl_perm0'] = 'Ei mitään';
+$lang['acl_perm1'] = 'Luku';
+$lang['acl_perm2'] = 'Muokkaus';
+$lang['acl_perm4'] = 'Luonti';
+$lang['acl_perm8'] = 'Lähetys';
+$lang['acl_perm16'] = 'Poisto';
+$lang['acl_new'] = 'Lisää uusi';
+$lang['acl_mod'] = 'Muokkaa';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fr/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fr/help.txt
new file mode 100644
index 000000000..69661bb9b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fr/help.txt
@@ -0,0 +1,9 @@
+=== Aide rapide : ===
+
+Cette page vous permet d'ajouter ou de supprimer des permissions pour les catégories et les pages de votre wiki. Le panneau de gauche liste toutes les catégories et les pages disponibles.
+
+Le formulaire au dessus permet d'afficher et de modifier les permissions d'un utilisateur ou d'un groupe sélectionné.
+
+Dans la table ci-dessous toutes les listes de contrôle d'accès actuelles sont affichées. Vous pouvez l'utiliser pour supprimer ou modifier rapidement plusieurs ACLs.
+
+La lecture de [[doku>acl|la documentation officielle des ACLs]] pourra vous permettre de comprendre complètement le fonctionnement du contrôle d'accès dans DokuWiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fr/lang.php
new file mode 100644
index 000000000..efdc5f074
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fr/lang.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * french language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Sébastien Bauer <sebastien.bauer@advalvas.be>
+ * @author Antoine Fixary <antoine.fixary@freesbee.fr>
+ * @author cumulus <pta-n56@myamail.com>
+ * @author Gwenn Gueguen <contact@demisel.net>
+ * @author Guy Brand <gb@isis.u-strasbg.fr>
+ * @author Fabien Chabreuil <fabien@integralpersonality.com>
+ * @author Stéphane Chamberland <stephane.chamberland@ec.gc.ca>
+ * @author Maurice A. LeBlanc <leblancma@cooptel.qc.ca>
+ * @author gb@isis.u-strasbg.fr
+ * @author stephane.gully@gmail.com
+ * @author Guillaume Turri <guillaume.turri@gmail.com>
+ * @author Erik Pedersen <erik.pedersen@shaw.ca>
+ * @author olivier duperray <duperray.olivier@laposte.net>
+ * @author Vincent Feltz <psycho@feltzv.fr>
+ */
+$lang['admin_acl'] = 'Gestion de la liste des contrôles d\'accès (ACL)';
+$lang['acl_group'] = 'Groupe';
+$lang['acl_user'] = 'Utilisateur';
+$lang['acl_perms'] = 'Permission pour';
+$lang['page'] = 'Page';
+$lang['namespace'] = 'Catégorie';
+$lang['btn_select'] = 'Sélectionner';
+$lang['p_user_id'] = 'Permissions actuelles de l\'utilisateur <b class="acluser">%s</b> sur la page <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Permissions actuelles de l\'utilisateur <b class="acluser">%s</b> sur la catégorie <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Permissions actuelles des membres du groupe <b class="aclgroup">%s</b> sur la page <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Permissions actuelles des membres du groupe <b class="aclgroup">%s</b> sur la catégorie <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Saisissez un nom <b>d\'utilisateur ou de groupe</b> dans le formulaire ci-dessus pour afficher ou éditer les permissions relatives à la page <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Saisissez un nom <b>d\'utilisateur ou de groupe</b> dans le formulaire ci-dessous pour afficher ou éditer les permissions relatives à la catégorie <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Note : Ces permissions n\'ont pas été explicitement fixées mais sont héritées d\'autres groupes ou catégories supérieures.';
+$lang['p_isadmin'] = 'Note : Le groupe ou l\'utilisateur sélectionné dispose de toutes les permissions car il est paramétré en tant que superutilisateur.';
+$lang['p_include'] = 'Les permissions les plus élevées induisent les plus faibles. Création, Télécharger, et Effacer, ne s\'appliquent qu\'aux catégories ; pas aux pages.';
+$lang['current'] = 'ACL actuelles';
+$lang['where'] = 'Page/Catégorie';
+$lang['who'] = 'Utilisateur/Groupe';
+$lang['perm'] = 'Permissions';
+$lang['acl_perm0'] = 'Aucune';
+$lang['acl_perm1'] = 'Lecture';
+$lang['acl_perm2'] = 'Écriture';
+$lang['acl_perm4'] = 'Création';
+$lang['acl_perm8'] = 'Télécharger';
+$lang['acl_perm16'] = 'Effacer';
+$lang['acl_new'] = 'Ajouter une nouvelle entrée';
+$lang['acl_mod'] = 'Modifier l\'entrée';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/gl/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/gl/help.txt
new file mode 100644
index 000000000..c427b182f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/gl/help.txt
@@ -0,0 +1,11 @@
+=== Axuda rápida: ===
+
+Nesta páxina pode engadir e eliminar os permisos para os nomes de espazo e as páxinas do seu wiki.
+
+O panel da esquerda mostra todos os nomes de espazo e páxinas dispoñíbeis.
+
+O formulario de arriba permítelle ver e modificar os permisos da persoa usuaria ou grupo seleccionada.
+
+Na táboa de abaixo móstranse todas as regras de control de accesos estabelecidas. Pode empregala para cambiar ou eliminar varias regras dun xeito rápido.
+
+A lectura da [[doku>acl|documentación oficial da ACL]] pode servirlle de axuda para comprender como funciona o control de accesos no Dokuwiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/gl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/gl/lang.php
new file mode 100644
index 000000000..184cf7e1d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/gl/lang.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Galicianlanguage file
+ *
+ * @author CiberIrmandade da Fala <infoxeral@ciberirmandade.org>
+ * @author Tagen Ata <localizacion@tagenata.com>
+ * @author Leandro Regueiro <leandro.regueiro@gmail.com>
+ */
+$lang['admin_acl'] = 'Xestión da Lista de control de acceso (ACL)';
+$lang['acl_group'] = 'Grupo';
+$lang['acl_user'] = 'Usuaria/o';
+$lang['acl_perms'] = 'Permisos para';
+$lang['page'] = 'Páxina';
+$lang['namespace'] = 'Nome de espazo';
+$lang['btn_select'] = 'Selecciona';
+$lang['p_user_id'] = 'A persoa usuaria <b class="acluser">%s</b> dispón actualmente dos seguintes permisos na páxina <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'A persoa usuaria <b class="acluser">%s</b> dispón actualmente dos seguintes permisos no nome de espazo <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'As e os integrantes do grupo <b class="aclgroup">%s</b> dispoñen actualmente dos seguintes permisos na páxina <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'As e os integrantes do grupo <b class="aclgroup">%s</b> dispoñen actualmente dos seguintes permisos no nome de espazo <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = '<b>Insira un nome de usuaria/o ou grupo</b> no formulario de arriba para ver ou editar os permisos estabelecidos para a páxina <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = '<b>Insira un nome de usuaria/o ou grupo</b> no formulario de arriba para ver ou editar os permisos estabelecidos no nome de espazo <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Nota: Estes permisos non foron estabelecidos explicitamente senón que foron herdados doutros grupos ou nomes de espazo maiores.';
+$lang['p_isadmin'] = 'Nota: O grupo ou a persoa usuaria seleccionado terá sempre permisos completos por estar configurado como superusuaria/o.';
+$lang['p_include'] = 'Os permisos máis grandes inclúen os menores. Os permisos de Creación, Subida e Eliminación só se aplican aos nomes de espazo, non ás páxinas.';
+$lang['current'] = 'Regras ACL actuais';
+$lang['where'] = 'Páxina/Nome de espazo';
+$lang['who'] = 'Usuaria/o/Grupo';
+$lang['perm'] = 'Permisos';
+$lang['acl_perm0'] = 'Ningún';
+$lang['acl_perm1'] = 'Ler';
+$lang['acl_perm2'] = 'Editar';
+$lang['acl_perm4'] = 'Crear';
+$lang['acl_perm8'] = 'Subir ficheiros';
+$lang['acl_perm16'] = 'Eliminar';
+$lang['acl_new'] = 'Engadir una entrada';
+$lang['acl_mod'] = 'Modificar unha entrada';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/he/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/he/help.txt
new file mode 100644
index 000000000..33f2933b9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/he/help.txt
@@ -0,0 +1,11 @@
+=== עזרה חפוזה: ===
+
+בדף ×–×” ניתן להוסיף ולהסיר הרש×ות למרחבי שמות ×•×œ×“×¤×™× ×‘×•×™×§×™ שלך.
+
+הצד השמ×לי מציג ×ת כל מרבי השמות ×•×”×“×¤×™× ×”×–×ž×™× ×™×.
+
+הטופס מעלה מ×פשר לך לר×ות ולשנות ×ת ההרש×ות של משתמש ×ו קבוצה נבחרי×.
+
+בטבלה מטה ×ž×•×¦×’×™× ×›×œ כללי בקרת הגישה הנוכחיי×. ניתן להשתמש בה כדי למחוק ×ו לשנות מספר ×›×œ×œ×™× ×‘×ž×”×™×¨×•×ª.
+
+קרי×ת [[doku>acl|התיעוד הרשמי ל-ACL ACL]] יכולה לעזור לך להבין ב×ופן ×ž×œ× ×›×™×¦×“ בקרת הגישה עובדת בדוקוויקי.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/he/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/he/lang.php
new file mode 100644
index 000000000..7d73c63dd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/he/lang.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * hebrew language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author DoK <kamberd@yahoo.com>
+ * @author Dotan Kamber <kamberd@yahoo.com>
+ * @author Moshe Kaplan <mokplan@gmail.com>
+ */
+$lang['admin_acl'] = 'ניהול רשימת בקרת גישות';
+$lang['acl_group'] = 'קבוצה';
+$lang['acl_user'] = 'משתמש';
+$lang['acl_perms'] = 'הרש×ות עבור';
+$lang['page'] = 'דף';
+$lang['namespace'] = 'מרחב שמות';
+$lang['p_user_id'] = 'למשתמש <b class="acluser">%s</b> יש כרגע ×ת ההרש×ות הב×ות בדף <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'למשתמש <b class="acluser">%s</b> יש כרגע ×ת ההרש×ות הב×ות במרחב ×”×©× <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'לחברי קבוצת <b class="aclgroup">%s</b> יש כרגע ×ת ההרש×ות הב×ות בדף <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'לחברי קבוצת <b class="aclgroup">%s</b> יש כרגע ×ת ההרש×ות הב×ות במרחב ×”×©× <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = '× × <b>להזין משתמש ×ו קבוצה</b> בטופס מעלה כדי לצפות ×ו לערוך ×ת ההרש×ות המוגדרות עבור הדף <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = '× × <b>להזין משתמש ×ו קבוצה</b> בטופס מעלה כדי לצפות ×ו לערוך ×ת ההרש×ות המוגדרות עבור מרחב ×”×©× <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'לתשומת לבך: הרש×ות ×לו ×œ× ×”×•×’×“×¨×• ב×ופן מפורש ××œ× × ×•×¨×©×• מקבוצות ×חרות ×ו ממרחב שמות גבוה יותר.';
+$lang['p_isadmin'] = 'לתשומת לבך: לקבוצה ×ו המשתמש שנבחרו יש תמיד הרש×ות מל×ות בגלל ×”×’×“×¨×ª× ×›×ž×©×ª×ž×©-על.';
+$lang['current'] = 'חוקי ×”-ACL הנוכחיי×';
+$lang['where'] = 'דף/מרחב ש×';
+$lang['who'] = 'משתמש/קבוצה';
+$lang['perm'] = 'הרש×ות';
+$lang['acl_perm0'] = 'לל×';
+$lang['acl_perm1'] = 'קרי××”';
+$lang['acl_perm2'] = 'עריכה';
+$lang['acl_perm4'] = 'יצירה';
+$lang['acl_perm8'] = 'העל××”';
+$lang['acl_perm16'] = 'מחיקה';
+$lang['acl_new'] = 'הוספת רשומה חדשה';
+$lang['acl_mod'] = 'שינויי מוב××”';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hi/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hi/lang.php
new file mode 100644
index 000000000..d8630a281
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hi/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * Hindi language file
+ *
+ * @author Abhinav Tyagi <abhinavtyagi11@gmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hr/lang.php
new file mode 100644
index 000000000..d2094b77b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hr/lang.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * Croatian language file
+ *
+ * @author Branko Rihtman <theney@gmail.com>
+ * @author Dražen Odobašić <dodobasic@gmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hu/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hu/help.txt
new file mode 100644
index 000000000..57f16a39c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hu/help.txt
@@ -0,0 +1,12 @@
+=== Hozzáférési lista (ACL) kezelő ===
+
+Ezen az oldalon jogokat oszthat és vehet el a wiki oldalakhoz és névterekhez.
+
+A bal oldalon látható az összes névtér és oldal.
+
+A felső form segít a kiválasztott felhasználó vagy csoport jogosultságainak megtekintésében vagy változtatásában.
+
+Az alsó táblázat mutatja az összes jelenleg érvényes hozzáférési szabályt. Ennek segítségével gyorsan törölhetők vagy megváltoztathatók a szabályok.
+
+A [[doku>acl|hivatalos ACL dokumentáció]] segíthet a DokuWiki hozzáférés-kezelés működésének megértésében.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hu/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hu/lang.php
new file mode 100644
index 000000000..4fb1720ae
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hu/lang.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Hungarian language file
+ *
+ * @author Sandor TIHANYI <stihanyi+dw@gmail.com>
+ * @author Siaynoq Mage <siaynoqmage@gmail.com>
+ * @author schilling.janos@gmail.com
+ */
+$lang['admin_acl'] = 'Hozzáférési lista (ACL) kezelő';
+$lang['acl_group'] = 'Csoport:';
+$lang['acl_user'] = 'Felhasználó:';
+$lang['acl_perms'] = 'Jogosultság ehhez:';
+$lang['page'] = 'oldal';
+$lang['namespace'] = 'névtér';
+$lang['btn_select'] = 'Kiválaszt';
+$lang['p_user_id'] = 'A(z) <b class="acluser">%s</b> felhasználónak jelenleg a következő jogosultsága van ezen az oldalon: <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'A(z) <b class="acluser">%s</b> felhasználónak jelenleg a következő jogosultsága van ebben a névtérben: <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'A(z) <b class="aclgroup">%s</b> csoport tagjainak jelenleg a következő jogosultsága van ezen az oldalon: <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'A(z) <b class="aclgroup">%s</b> csoport tagjainak jelenleg a következő jogosultsága van ebben a névtérben: <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'A felső formon <b>adjon meg egy felhasználót vagy csoportot</b>, akinek a(z) <b class="aclpage">%s</b> oldalhoz beállított jogosultságait megtekinteni vagy változtatni szeretné.';
+$lang['p_choose_ns'] = 'A felső formon <b>adjon meg egy felhasználót vagy csoportot</b>, akinek a(z) <b class="aclns">%s</b> névtérhez beállított jogosultságait megtekinteni vagy változtatni szeretné.';
+$lang['p_inherited'] = 'Megjegyzés: ezek a jogok nem itt lettek explicit beállítva, hanem öröklődtek egyéb csoportokból vagy felsőbb névterekből.';
+$lang['p_isadmin'] = 'Megjegyzés: a kiválasztott csoportnak vagy felhasználónak mindig teljes jogosultsága lesz, mert Wiki-gazdának van beállítva.';
+$lang['p_include'] = 'A magasabb jogok tartalmazzák az alacsonyabbakat. A Létrehozás, Feltöltés és Törlés jogosultságok csak névterekre alkalmazhatók, az egyes oldalakra nem.';
+$lang['current'] = 'Jelenlegi hozzáférési szabályok';
+$lang['where'] = 'Oldal/névtér';
+$lang['who'] = 'Felhasználó/Csoport';
+$lang['perm'] = 'Jogosultságok';
+$lang['acl_perm0'] = 'Semmi';
+$lang['acl_perm1'] = 'Olvasás';
+$lang['acl_perm2'] = 'Szerkesztés';
+$lang['acl_perm4'] = 'Létrehozás';
+$lang['acl_perm8'] = 'Feltöltés';
+$lang['acl_perm16'] = 'Törlés';
+$lang['acl_new'] = 'Új bejegyzés hozzáadása';
+$lang['acl_mod'] = 'Bejegyzés módosítása';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/id-ni/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/id-ni/lang.php
new file mode 100644
index 000000000..d367340b7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/id-ni/lang.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * idni language file
+ *
+ * @author Harefa <fidelis@harefa.com>
+ * @author Yustinus Waruwu <juswaruwu@gmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/id/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/id/lang.php
new file mode 100644
index 000000000..650637635
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/id/lang.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Indonesian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author mubaidillah <mubaidillah@gmail.com>
+ * @author Yustinus Waruwu <juswaruwu@gmail.com>
+ */
+$lang['admin_acl'] = 'Manajemen Daftar Pengendali Akses';
+$lang['acl_group'] = 'Grup';
+$lang['acl_user'] = 'User';
+$lang['acl_perms'] = 'Ijin untuk';
+$lang['page'] = 'Halaman';
+$lang['namespace'] = 'Namespace';
+$lang['btn_select'] = 'Pilih';
+$lang['acl_perm1'] = 'Baca';
+$lang['acl_perm2'] = 'Ubah';
+$lang['acl_perm4'] = 'Buat';
+$lang['acl_perm8'] = 'Upload';
+$lang['acl_perm16'] = 'Hapus';
+$lang['acl_new'] = 'Tambah Entry baru';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/is/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/is/lang.php
new file mode 100644
index 000000000..b45faa80a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/is/lang.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * Icelandic language file
+ *
+ * @author Hrannar Baldursson <hrannar.baldursson@gmail.com>
+ * @author Ólafur Gunnlaugsson <oli@audiotools.com>
+ * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
+ */
+$lang['acl_group'] = 'Hópur';
+$lang['acl_user'] = 'Notandi';
+$lang['page'] = 'Síða';
+$lang['namespace'] = 'Nafnrými';
+$lang['btn_select'] = 'Veldu';
+$lang['where'] = 'Síða/Nafnrými';
+$lang['acl_perm16'] = 'Eyða';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/it/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/it/help.txt
new file mode 100644
index 000000000..5e4b08dd6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/it/help.txt
@@ -0,0 +1,11 @@
+=== Breve Aiuto: ===
+
+In questa pagina puoi aggiungere e rimuovere permessi per categorie e pagine del tuo wiki.
+
+Il pannello di sinistra mostra tutte le categorie e le pagine disponibili.
+
+Il campo sopra ti permette di vedere e modificare i permessi di un utente o gruppo selezionato.
+
+Nella tabella sotto, sono riportate tutte le regole di controllo degli accessi attualmente impostate. Puoi utilizzarla per cancellare o cambiare al volo varie regole.
+
+Leggere la [[doku>acl|official documentation on ACL]] può aiutarti a capire pienamente come funziona il controllo degli accessi in DokuWiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/it/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/it/lang.php
new file mode 100644
index 000000000..344987e8b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/it/lang.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Italian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Giorgio Vecchiocattivi <giorgio@vecchio.it>
+ * @author Roberto Bolli <http://www.rbnet.it/>
+ * @author Pietro Battiston toobaz@email.it
+ * @author Diego Pierotto ita.translations@tiscali.it
+ * @author ita.translations@tiscali.it
+ * @author Lorenzo Breda <lbreda@gmail.com>
+ * @author snarchio@alice.it
+ * @author robocap <robocap1@gmail.com>
+ */
+$lang['admin_acl'] = 'Gestione Lista Controllo Accessi (ACL)';
+$lang['acl_group'] = 'Gruppo';
+$lang['acl_user'] = 'Utente';
+$lang['acl_perms'] = 'Permessi per';
+$lang['page'] = 'Pagina';
+$lang['namespace'] = 'Categoria';
+$lang['btn_select'] = 'Seleziona';
+$lang['p_user_id'] = 'L\'utente <b class="acluser">%s</b> attualmente ha i seguenti permessi sulla pagina <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'L\'utente <b class="acluser">%s</b> attualmente ha i seguenti permessi per la categoria <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'I membri del gruppo<b class="aclgroup">%s</b> attualmente hanno i seguenti permessi sulla pagina <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'I membri del gruppo<b class="aclgroup">%s</b> attualmente hanno i seguenti permessi per la categoria <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Per favore <b>inserisci un utente o gruppo</b> nel campo sopra per modificare i permessi impostati per la pagina <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Per favore <b>inserisci un utente o un gruppo</b> nel campo sopra per modificare i permessi impostati per la categoria <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Nota: Questi permessi non sono stati esplicitamente impostati, ma sono stati ereditati da altri gruppi o da categorie superiori.';
+$lang['p_isadmin'] = 'Nota: Il gruppo o utente selezionato ha sempre tutti i permessi perché è configurato come amministratore.';
+$lang['p_include'] = 'I permessi più elevati includono i permessi inferiori. I permessi di Creazione, Upload e Cancellazione si applicano soltanto alle categorie e non alle pagine.';
+$lang['current'] = 'Regole ACL attuali';
+$lang['where'] = 'Pagina/Categoria';
+$lang['who'] = 'Utente/Gruppo';
+$lang['perm'] = 'Permessi';
+$lang['acl_perm0'] = 'Nessuno';
+$lang['acl_perm1'] = 'Lettura';
+$lang['acl_perm2'] = 'Modifica';
+$lang['acl_perm4'] = 'Creazione';
+$lang['acl_perm8'] = 'Upload';
+$lang['acl_perm16'] = 'Cancellazione';
+$lang['acl_new'] = 'Aggiungi nuovo record';
+$lang['acl_mod'] = 'Modifica record';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ja/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ja/help.txt
new file mode 100644
index 000000000..f7867f8e2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ja/help.txt
@@ -0,0 +1,11 @@
+=== クイックヘルプ: ===
+
+ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€Wiki内ã®åå‰ç©ºé–“ã¨ãƒšãƒ¼ã‚¸ã«å¯¾ã™ã‚‹æ¨©é™ã‚’追加・削除ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+å·¦å´ã®ãƒœãƒƒã‚¯ã‚¹ã«ã¯å­˜åœ¨ã™ã‚‹åå‰ç©ºé–“ã¨ãƒšãƒ¼ã‚¸ãŒè¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã™ã€‚
+
+上記ã®ãƒ•ã‚©ãƒ¼ãƒ ã‚’使ã£ã¦ã€é¸æŠžã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚‚ã—ãã¯ã‚°ãƒ«ãƒ¼ãƒ—ã®æ¨©é™ã‚’閲覧・変更ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+以下ã®ãƒ†ãƒ¼ãƒ—ルã«ã¯ã€ç¾åœ¨è¨­å®šã•ã‚Œã¦ã„るアクセスコントロールã®ãƒ«ãƒ¼ãƒ«ãŒè¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã™ã€‚ã“ã®ãƒ†ãƒ¼ãƒ–ルを使ã£ã¦ã€è¤‡æ•°ã®ãƒ«ãƒ¼ãƒ«ã‚’ç´ æ—©ã変更・削除ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚
+
+DokuWikiã®ã‚¢ã‚¯ã‚»ã‚¹ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ã«ã¤ã„ã¦ã¯ã€[[doku>acl|official documentation on ACL]] ã‚’ãŠèª­ã¿ä¸‹ã•ã„。 \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ja/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ja/lang.php
new file mode 100644
index 000000000..831fd2d5c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ja/lang.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * japanese language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Davilin(Yuji Takenaka) <webmaster@davilin.com>
+ * @author Yuji Takenaka <webmaster@davilin.com>
+ * @author Ikuo Obataya <i.obataya@gmail.com>
+ * @author Daniel Dupriest <kououken@gmail.com>
+ * @author Kazutaka Miyasaka <kazmiya@gmail.com>
+ */
+$lang['admin_acl'] = 'アクセスコントロール管ç†';
+$lang['acl_group'] = 'グループ';
+$lang['acl_user'] = 'ユーザー';
+$lang['acl_perms'] = '権é™ã‚’追加';
+$lang['page'] = '文書';
+$lang['namespace'] = 'åå‰ç©ºé–“';
+$lang['btn_select'] = 'é¸æŠž';
+$lang['p_user_id'] = 'ユーザー <b class="acluser">%s</b> ã¯ã€ãƒšãƒ¼ã‚¸ <b class="aclpage">%s</b> ã«å¯¾ã—ã¦æ¬¡ã®æ¨©é™ã‚’æŒã£ã¦ã„ã¾ã™: <i>%s</i>';
+$lang['p_user_ns'] = 'ユーザー <b class="acluser">%s</b> ã¯ã€åå‰ç©ºé–“ <b class="aclns">%s</b> ã«å¯¾ã—ã¦æ¬¡ã®æ¨©é™ã‚’æŒã£ã¦ã„ã¾ã™: <i>%s</i>';
+$lang['p_group_id'] = 'グループ <b class="aclgroup">%s</b> ã®ãƒ¡ãƒ³ãƒãƒ¼ã¯ã€ãƒšãƒ¼ã‚¸ <b class="aclpage">%s</b> ã«å¯¾ã—ã¦æ¬¡ã®æ¨©é™ã‚’æŒã£ã¦ã„ã¾ã™: <i>%s</i>';
+$lang['p_group_ns'] = 'グループ <b class="aclgroup">%s</b> ã®ãƒ¡ãƒ³ãƒãƒ¼ã¯ã€åå‰ç©ºé–“ <b class="aclns">%s</b> ã«å¯¾ã—ã¦æ¬¡ã®æ¨©é™ã‚’æŒã£ã¦ã„ã¾ã™: <i>%s</i>';
+$lang['p_choose_id'] = 'ページ <b class="aclpage">%s</b> ã«ã‚»ãƒƒãƒˆã•ã‚ŒãŸæ¨©é™ã‚’閲覧・編集ã™ã‚‹ãŸã‚ã«ã¯ã€ä¸Šè¨˜ã®ãƒ•ã‚©ãƒ¼ãƒ ã«<b>ユーザーåã‚‚ã—ãã¯ã‚°ãƒ«ãƒ¼ãƒ—åを入力ã—ã¦ä¸‹ã•ã„</b>。';
+$lang['p_choose_ns'] = 'åå‰ç©ºé–“ <b class="aclns">%s</b> ã«ã‚»ãƒƒãƒˆã•ã‚ŒãŸæ¨©é™ã‚’閲覧・編集ã™ã‚‹ãŸã‚ã«ã¯ã€ä¸Šè¨˜ã®ãƒ•ã‚©ãƒ¼ãƒ ã«<b>ユーザーåã‚‚ã—ãã¯ã‚°ãƒ«ãƒ¼ãƒ—åを入力ã—ã¦ä¸‹ã•ã„</b>。';
+$lang['p_inherited'] = '注æ„:ã“れらã®æ¨©é™ã¯æ˜Žç¤ºã•ã‚Œã¦ã„ã¾ã›ã‚“ãŒã€ä»–ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‚‚ã—ãã¯ä¸Šä½ã®åå‰ç©ºé–“ã®æ¨©é™ã‚’継承ã—ã¾ã™ã€‚';
+$lang['p_isadmin'] = '注æ„:é¸æŠžã—ãŸã‚°ãƒ«ãƒ¼ãƒ—ã‚‚ã—ãã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã‚¹ãƒ¼ãƒ‘ーユーザーã§ã‚ã‚‹ãŸã‚ã€å…¨ã¦ã®æ¨©é™ãŒã‚ã‚Šã¾ã™ã€‚';
+$lang['p_include'] = '高次ã®æ¨©é™ã¯ã€ãれより低次ã®æ¨©é™ã‚’å«ã¿ã¾ã™ã€‚作æˆãƒ»ã‚¢ãƒƒãƒ—ロード・削除ã®æ¨©é™ã¯ã€ãƒšãƒ¼ã‚¸ã§ã¯ãªãåå‰ç©ºé–“ã®ã¿ã«é©ç”¨ã•ã‚Œã¾ã™ã€‚';
+$lang['current'] = 'ç¾åœ¨ã®ACLルール';
+$lang['where'] = 'ページ/åå‰ç©ºé–“';
+$lang['who'] = 'ユーザー/グループ';
+$lang['perm'] = '権é™';
+$lang['acl_perm0'] = 'ç„¡ã—';
+$lang['acl_perm1'] = '読å–';
+$lang['acl_perm2'] = '編集';
+$lang['acl_perm4'] = '作æˆ';
+$lang['acl_perm8'] = 'アップロード';
+$lang['acl_perm16'] = '削除';
+$lang['acl_new'] = 'æ–°è¦ã‚¨ãƒ³ãƒˆãƒª';
+$lang['acl_mod'] = 'エントリã®ç·¨é›†';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ko/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ko/help.txt
new file mode 100644
index 000000000..516198ee5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ko/help.txt
@@ -0,0 +1,11 @@
+=== ë„움ë§: ===
+
+현재 페ì´ì§€ì—ì„œ 위키 네임스페ì´ìŠ¤ì™€ 페ì´ì§€ì— 대한 ì ‘ê·¼ ê¶Œí•œì„ ì¶”ê°€í•˜ê±°ë‚˜ 삭제할 수 있습니다.
+
+왼쪽 ì˜ì—­ì„ ì„ íƒê°€ëŠ¥í•œ 네임스페ì´ìŠ¤ë“¤ê³¼ 페ì´ì§€ 목ë¡ì„ ë³´ì—¬ì¤ë‹ˆë‹¤.
+
+위쪽 ìž…ë ¥ ì–‘ì‹ì—ì„œ ì„ íƒëœ 사용ìžì™€ ê·¸ë£¹ì˜ ì ‘ê·¼ ê¶Œí•œì„ ë³´ê±°ë‚˜ 변경할 수 있습니다.
+
+아래 í…Œì´ë¸”ì—ì„œ 현재 ì„¤ì •ëœ ëª¨ë“  ì ‘ê·¼ 제어 ê·œì¹™ë“¤ì„ ë³¼ 수 있으며, 즉시 여러 ê·œì¹™ë“¤ì„ ì‚­ì œí•˜ê±°ë‚˜ 변경할 수 있습니다.
+
+DokuWikiì—ì„œ ì ‘ê·¼ 제어가 어떻게 ë™ìž‘ë˜ëŠ”지 알려면 [[doku>acl|official documentation on ACL]] ì½ê¸° ë°”ëžë‹ˆë‹¤. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ko/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ko/lang.php
new file mode 100644
index 000000000..43a5ceeeb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ko/lang.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * korean language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Anika Henke <anika@selfthinker.org>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @author jk Lee
+ * @author dongnak@gmail.com
+ * @author Song Younghwan <purluno@gmail.com>
+ * @author SONG Younghwan <purluno@gmail.com>
+ */
+$lang['admin_acl'] = 'ì ‘ê·¼ 제어 ëª©ë¡ ê´€ë¦¬';
+$lang['acl_group'] = '그룹';
+$lang['acl_user'] = '사용ìž';
+$lang['acl_perms'] = '권한';
+$lang['page'] = '페ì´ì§€';
+$lang['namespace'] = '네임스페ì´ìŠ¤';
+$lang['btn_select'] = 'ì„ íƒ';
+$lang['p_user_id'] = 'ì‚¬ìš©ìž <b class="acluser">%s</b>는 현재 <b class="aclpage">%s</b>: <i>%s</i> 페ì´ì§€ ì ‘ê·¼ì´ ê°€ëŠ¥í•©ë‹ˆë‹¤.';
+$lang['p_user_ns'] = 'ì‚¬ìš©ìž <b class="acluser">%s</b>는 현재 <b class="aclns">%s</b>: <i>%s</i> 네임스페ì´ìŠ¤ ì ‘ê·¼ì´ ê°€ëŠ¥í•©ë‹ˆë‹¤.';
+$lang['p_group_id'] = '그룹 <b class="aclgroup">%s</b> 사용ìžëŠ” 현재 <b class="aclpage">%s</b>: <i>%s</i> 페ì´ì§€ ì ‘ê·¼ì´ ê°€ëŠ¥í•©ë‹ˆë‹¤.';
+$lang['p_group_ns'] = '그룹 <b class="aclgroup">%s</b> 사용ìžëŠ” 현재 <b class="aclns">%s</b>: <i>%s</i> 네임스페ì´ìŠ¤ ì ‘ê·¼ì´ ê°€ëŠ¥í•©ë‹ˆë‹¤.';
+$lang['p_choose_id'] = '<b class="aclpage">%s</b> 페ì´ì§€ ì ‘ê·¼ ê¶Œí•œì„ ë³´ê±°ë‚˜ 변경하려면 <b>사용ìž</b>나 <b>그룹</b>ì„ ìœ„ ì–‘ì‹ì— 입력하기 ë°”ëžë‹ˆë‹¤.';
+$lang['p_choose_ns'] = '<b class="aclns">%s</b> 네임스페ì´ìŠ¤ ì ‘ê·¼ ê¶Œí•œì„ ë³´ê±°ë‚˜ 변경하려면 <b>사용ìž</b>나 <b>그룹</b>ì„ ìœ„ ì–‘ì‹ì— 입력하기 ë°”ëžë‹ˆë‹¤.';
+$lang['p_inherited'] = '주ì˜: ê¶Œí•œì´ ëª…ì‹œì ìœ¼ë¡œ 설정ë˜ì§€ 않았으므로 다른 그룹들ì´ë‚˜ ìƒìœ„ 네임스페ì´ìŠ¤ë¡œ 부터 가져왔습니다.';
+$lang['p_isadmin'] = '주ì˜: 슈í¼ìœ ì €ë¡œ 설정ë˜ì–´ 있으므로 ì„ íƒëœ 그룹ì´ë‚˜ 사용ìžëŠ” 언제나 모든 ì ‘ê·¼ ê¶Œí•œì„ ê°€ì§‘ë‹ˆë‹¤.';
+$lang['p_include'] = 'ë” ë†’ì€ ì ‘ê·¼ê¶Œí•œì€ í•˜ìœ„ë¥¼ í¬í•¨í•©ë‹ˆë‹¤. 페ì´ì§€ê°€ ì•„ë‹Œ 네임스페ì´ìŠ¤ì—는 ìƒì„±, 업로드, ì‚­ì œ 권한만 ì ìš©ë©ë‹ˆë‹¤.';
+$lang['current'] = '현 ACL 규칙';
+$lang['where'] = '페ì´ì§€/네임스페ì´ìŠ¤';
+$lang['who'] = '사용ìž/그룹';
+$lang['perm'] = '접근 권한';
+$lang['acl_perm0'] = 'ì—†ìŒ';
+$lang['acl_perm1'] = 'ì½ê¸°';
+$lang['acl_perm2'] = '수정';
+$lang['acl_perm4'] = 'ìƒì„±';
+$lang['acl_perm8'] = '업로드';
+$lang['acl_perm16'] = '삭제';
+$lang['acl_new'] = '새 항목 추가';
+$lang['acl_mod'] = 'ì„ íƒ í•­ëª© 변경';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lt/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lt/lang.php
new file mode 100644
index 000000000..f11944746
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lt/lang.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * lithuanian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Linas Valiukas <shirshegsm@gmail.com>
+ * @author audrius.klevas@gmail.com
+ * @author Arunas Vaitekunas <aras@fan.lt>
+ */
+$lang['admin_acl'] = 'Priėjimo Kontrolės Sąrašų valdymas';
+$lang['acl_group'] = 'GrupÄ—';
+$lang['acl_user'] = 'Vartotojas';
+$lang['acl_perms'] = 'Leidimai';
+$lang['page'] = 'Puslapis';
+$lang['namespace'] = 'Pavadinimas';
+$lang['btn_select'] = 'Rinktis';
+$lang['acl_perm1'] = 'Skaityti';
+$lang['acl_perm2'] = 'Redaguoti';
+$lang['acl_perm4'] = 'Sukurti';
+$lang['acl_perm8'] = 'Atsiųsti';
+$lang['acl_perm16'] = 'IÅ¡trinti';
+$lang['acl_new'] = 'Pridėti naują įrašą';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lv/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lv/help.txt
new file mode 100644
index 000000000..f570d798c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lv/help.txt
@@ -0,0 +1,11 @@
+=== Īsa palīdzība ===
+
+Å ajÄ lapÄ var uzdot un noņemt tiesÄ«bas uz lapÄm un nodaļÄm.
+
+KreisajÄ pusÄ“ parÄdÄ«tas visas pieejamÄs nodaļas un lapas.
+
+FormÄ augÅ¡pusÄ“ var redzÄ“t un grozÄ«t norÄdÄ«tÄ lietotÄja vai grupas tiesÄ«bas .
+
+ApakÅ¡Ä tabulÄ parÄdÄ«ts visu tiesÄ«bu saraksts. To var lietot, lai Ätri mainÄ«tu vairÄkus pieejas tiesÄ«bu noteikumus.
+
+[[doku>acl|OfficiÄlajos piekļuves tiesÄ«bu noteikumu dokumentos]] var atrast izvÄ“rstu informÄciju, kÄ darbojas DokuWiki sistÄ“mas piekļuves tiesÄ«bu kontrole.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lv/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lv/lang.php
new file mode 100644
index 000000000..f478b32c6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lv/lang.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * latvian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Aivars Miška <allefm@gmail.com>
+ */
+$lang['admin_acl'] = 'Piekļuves tiesību vadība';
+$lang['acl_group'] = 'Grupa';
+$lang['acl_user'] = 'LietotÄjs';
+$lang['acl_perms'] = 'Tiesības';
+$lang['page'] = 'Lapa';
+$lang['namespace'] = 'Nodaļa';
+$lang['btn_select'] = 'Izvēlēties';
+$lang['p_user_id'] = 'LietotÄjam <b class="acluser">%s</b> ir tiesÄ«bas <i>%s</i> lapu <b class="aclpage">%s</b> .';
+$lang['p_user_ns'] = 'LietotÄjam <b class="acluser">%s</b> nodaÄ¼Ä <b class="aclns">%s</b> ir tiesÄ«bas <i>%s</i>.';
+$lang['p_group_id'] = 'Grupas <b class="aclgroup">%s</b> biedriem ir tiesības <i>%s</i> lapu <b class="aclpage">%s</b>.';
+$lang['p_group_ns'] = 'Grupas <b class="aclgroup">%s</b> biedriem ir tiesības <i>%s</i> nodaļu <b class="aclns">%s</b>: .';
+$lang['p_choose_id'] = 'LÅ«dzu <b>ieraksti lietotÄju vai grupu</b> augstÄk norÄdÄ«tajÄ laukÄ, lai skatÄ«tu vai labotu tiesÄ«bas lapai <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'LÅ«dzu <b>ieraksti lietotÄju vai grupu</b> augstÄk norÄdÄ«tajÄ laukÄ, lai skatÄ«tu vai labotu tiesÄ«bas nodaļai <b class="aclpage">%s</b>.';
+$lang['p_inherited'] = 'IevÄ“ro: Å Ä«s tiesÄ«bas nav tieÅ¡i uzdotas, bet mantotas no citÄm grupÄm vai augstÄkÄm nodaļÄm. ';
+$lang['p_isadmin'] = 'IevÄ“ro: NorÄdÄ«tajai grupai vai lietotÄjam vienmÄ“r ir visas tiesÄ«bas, jo tas konfigurÄ“ts kÄ <i>superuser</i>.';
+$lang['p_include'] = 'AugstÄka atļauja iekļauj arÄ« zemÄkÄs tiesÄ«bas. IzveidoÅ¡anas, augÅ¡upielÄdÄ“Å¡anas un dzÄ“Å¡anas tiesÄ«bas attiecas tikai uz nodaļÄm, nevis lapÄm.';
+$lang['current'] = 'Patreizējo tiesību saraksts (ACL)';
+$lang['where'] = 'Lapa/nodaļa';
+$lang['who'] = 'LietotÄjs/grupa';
+$lang['perm'] = 'Tiesības';
+$lang['acl_perm0'] = 'nekÄdas';
+$lang['acl_perm1'] = 'lasīt';
+$lang['acl_perm2'] = 'labot';
+$lang['acl_perm4'] = 'izveidot';
+$lang['acl_perm8'] = 'augÅ¡upielÄdÄ“t';
+$lang['acl_perm16'] = 'dzēst';
+$lang['acl_new'] = 'pievienot jaunu Å¡Ä·irkli';
+$lang['acl_mod'] = 'labot Å¡Ä·irkli';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/mr/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/mr/help.txt
new file mode 100644
index 000000000..e8aa13b52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/mr/help.txt
@@ -0,0 +1,12 @@
+=== तà¥à¤µà¤°à¤¿à¤¤ मदत ===
+
+या पानावर तà¥à¤®à¤šà¥€ तà¥à¤®à¤šà¥à¤¯à¤¾ विकी मधील पाने किंवा नेमसà¥à¤ªà¥‡à¤¸ वरील परवानगà¥à¤¯à¤¾ बदलू शकता.
+
+डाविकडील मारà¥à¤œà¤¿à¤¨ मधे सरà¥à¤µ उपलबà¥à¤§ पाने आणि नेमसà¥à¤ªà¥‡à¤¸ दाखवले आहेत.
+
+वरील फॉरà¥à¤® वापरून तà¥à¤®à¤šà¥€ निवडलेलà¥à¤¯à¤¾ सदसà¥à¤¯ किंवा गटाचà¥à¤¯à¤¾ परवानगà¥à¤¯à¤¾ बदलू शकता.
+
+खालील टेबल मधे सधà¥à¤¯à¤¾ सेट असलेले नियम दिलेले आहेत.
+हे टेबल वापरून तà¥à¤®à¥à¤¹à¥€ चटकन हे नियम बदलू शकता.
+
+[[doku>acl| ACL वरील अधिकृत माहितीसंगà¥à¤°à¤¹ ]] वाचून तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿à¤®à¤§à¥‡ परवानगीची वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾ कशी काम करते ते नीट समजेल. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/mr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/mr/lang.php
new file mode 100644
index 000000000..978df758a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/mr/lang.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Marathi language file
+ *
+ * @author ghatothkach@hotmail.com
+ * @author Padmanabh Kulkarni <kulkarnipadmanabh@gmail.com>
+ * @author Padmanabh Kulkarni<kulkarnipadmanabh@gmail.com>
+ * @author shantanoo@gmail.com
+ */
+$lang['admin_acl'] = 'Access Control List वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤¨';
+$lang['acl_group'] = 'गट';
+$lang['acl_user'] = 'सदसà¥à¤¯';
+$lang['acl_perms'] = 'परवानगी \'चà¥à¤¯à¤¾ साठी';
+$lang['page'] = 'पान';
+$lang['namespace'] = 'नेमसà¥à¤ªà¥‡à¤¸';
+$lang['btn_select'] = 'निवडा';
+$lang['p_user_id'] = '<b class="acluser">%s</b> हà¥à¤¯à¤¾ सदसà¥à¤¯à¤¾à¤²à¤¾ सधà¥à¤¯à¤¾ <b class="aclpage">%s</b> या पानावर पà¥à¤¢à¥€à¤² परवानगà¥à¤¯à¤¾ आहेत : <i>%s</i>.';
+$lang['p_user_ns'] = '<b class="acluser">%s</b> या सदसà¥à¤¯à¤¾à¤²à¤¾ सधà¥à¤¯à¤¾ <b class="aclns">%s</b> या नेमसà¥à¤ªà¥‡à¤¸à¤µà¤° पà¥à¤¢à¥€à¤² परवानगà¥à¤¯à¤¾ आहेत : <i>%s</i>.';
+$lang['p_group_id'] = '<b class="aclgroup">%s</b> या गटाचà¥à¤¯à¤¾ सदसà¥à¤¯à¤¾à¤¨à¤¾ सधà¥à¤¯à¤¾ <b class="aclpage">%s</b> या पानावर पà¥à¤¢à¥€à¤² परवानगà¥à¤¯à¤¾ आहेत : <i>%s</i>.';
+$lang['p_group_ns'] = '<b class="aclgroup">%s</b> या गटाचà¥à¤¯à¤¾ सदसà¥à¤¯à¤¾à¤¨à¤¾ सधà¥à¤¯à¤¾ <b class="aclns">%s</b> या नेमसà¥à¤ªà¥‡à¤¸à¤µà¤° पà¥à¤¢à¥€à¤² परवानगà¥à¤¯à¤¾ आहेत : <i>%s</i>.';
+$lang['p_choose_id'] = 'वरील फॉरà¥à¤® मधे à¤à¤–ादà¥à¤¯à¤¾ <b>सदसà¥à¤¯ किंवा गटाचे </b> नाव टाकà¥à¤¨ <b class="aclpage">%s</b> या पानासाठी तà¥à¤¯à¤¾à¤‚चà¥à¤¯à¤¾ परवानगà¥à¤¯à¤¾ पाहू/बदलू शकता.';
+$lang['p_choose_ns'] = 'वरील फॉरà¥à¤® मधे à¤à¤–ादà¥à¤¯à¤¾ <b>सदसà¥à¤¯ किंवा गटाचे </b> नाव टाकà¥à¤¨ <b class="aclns">%s</b> या नेमसà¥à¤ªà¥‡à¤¸à¤¸à¤¾à¤ à¥€ तà¥à¤¯à¤¾à¤‚चà¥à¤¯à¤¾ परवानगà¥à¤¯à¤¾ पाहू/बदलू शकता.';
+$lang['p_inherited'] = 'टीप : हà¥à¤¯à¤¾ परवानगà¥à¤¯à¤¾ पà¥à¤°à¤¤à¥à¤¯à¤•à¥à¤· सेट केलà¥à¤¯à¤¾ नसून तà¥à¤¯à¤¾ इतर गट किंवा अधिक उचà¥à¤š नेमसà¥à¤ªà¥‡à¤¸ कडून वारसाहकà¥à¤•à¤¾à¤¨à¥‡ :) आलà¥à¤¯à¤¾ आहेत.';
+$lang['p_isadmin'] = 'टीप : निवडलेलà¥à¤¯à¤¾ सदसà¥à¤¯ किंवा गटाला कायम सरà¥à¤µ परवानगà¥à¤¯à¤¾ असतात कारण तो सà¥à¤ªà¤° सदसà¥à¤¯ मà¥à¤¹à¤£à¥à¤¨ सेट केला आहे.';
+$lang['p_include'] = 'उचà¥à¤š परवानगà¥à¤¯à¤¾à¤‚मधे तà¥à¤¯à¤¾à¤–ालिल परवानगà¥à¤¯à¤¾ अधà¥à¤¯à¤¾à¤¹à¥ƒà¤¤ असतात. कà¥à¤°à¤¿à¤à¤Ÿ, अपलोड आणि डिलीट परवानगà¥à¤¯à¤¾ फ़कà¥à¤¤ नामसमà¥à¤¹à¤¾à¤µà¤° (नेमसà¥à¤ªà¥‡à¤¸) लागू असतात, पानांवर नाही.';
+$lang['current'] = 'सदà¥à¤¯ ACL नियम';
+$lang['where'] = 'पान/नेमसà¥à¤ªà¥‡à¤¸';
+$lang['who'] = 'सदसà¥à¤¯/गट';
+$lang['perm'] = 'परवानगà¥à¤¯à¤¾';
+$lang['acl_perm0'] = 'काही नाही.';
+$lang['acl_perm1'] = 'वाचन';
+$lang['acl_perm2'] = 'संपादन';
+$lang['acl_perm4'] = 'निरà¥à¤®à¤¾à¤£';
+$lang['acl_perm8'] = 'अपलोड';
+$lang['acl_perm16'] = 'डिलीट';
+$lang['acl_new'] = 'नवीन à¤à¤‚टà¥à¤°à¥€ करा';
+$lang['acl_mod'] = 'à¤à¤‚टà¥à¤°à¥€ बदला';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ne/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ne/lang.php
new file mode 100644
index 000000000..6a29a9fa8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ne/lang.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Nepali language file
+ *
+ * @author Saroj Kumar Dhakal <lotusnagarkot@gmail.com>
+ * @author SarojKumar Dhakal <lotusnagarkot@yahoo.com>
+ * @author Saroj Dhakal<lotusnagarkot@yahoo.com>
+ */
+$lang['admin_acl'] = 'à¤à¤•à¥à¤¸à¥‡à¤¸ कनà¥à¤Ÿà¥à¤°à¥‹à¤² लिसà¥à¤Ÿ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤¨';
+$lang['acl_group'] = 'समूह';
+$lang['acl_user'] = 'पà¥à¤°à¥‹à¤—करà¥à¤¤à¤¾';
+$lang['acl_perms'] = 'को लागि अनà¥à¤®à¤¤à¤¿';
+$lang['page'] = 'पृषà¥à¤ ';
+$lang['namespace'] = 'नेमसà¥à¤ªà¥‡à¤¸';
+$lang['btn_select'] = 'छानà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['current'] = 'हालैको ACL नियमहरॠ';
+$lang['where'] = 'पृषà¥à¤  / नेमसà¥à¤ªà¥‡à¤¸';
+$lang['who'] = 'पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ / समूह ';
+$lang['perm'] = 'अनà¥à¤®à¤¤à¤¿';
+$lang['acl_perm0'] = 'कà¥à¤¨à¥ˆ पनि होइन';
+$lang['acl_perm1'] = 'पठन गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['acl_perm2'] = 'समà¥à¤ªà¤¾à¤¦à¤¨ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['acl_perm4'] = 'निरà¥à¤®à¤¾à¤£ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['acl_perm8'] = 'अपलोड गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['acl_perm16'] = 'मेटाउनà¥à¤¹à¥‹à¤¸à¥';
+$lang['acl_new'] = 'नयाठपà¥à¤°à¤µà¤¿à¤·à¥à¤ à¤¿ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['acl_mod'] = 'पà¥à¤°à¤µà¤¿à¤·à¥à¤ à¤¿ सचà¥à¤¯à¤¾à¤‰à¤¨à¥à¤¹à¥‹à¤¸à¥';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/nl/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/nl/help.txt
new file mode 100644
index 000000000..255f21ba0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/nl/help.txt
@@ -0,0 +1,11 @@
+=== Snelle hulp: ===
+
+Op deze pagina kun je bevoegdheden toevoegen en verwijderen voor namespaces en pagina's in je wiki.
+
+Het linkerpaneel geeft alle beschikbare namespaces en pagina's weer.
+
+In het formulier hierboven kun je bevoegdheden zien en aanpassen voor een selecteerde gebruiker of groep.
+
+In de tabel hieronder worden alle momenteel ingestelde toegangsregels weergegeven. Je kunt hier snel regels wijzigen of verwijderen.
+
+Lees de [[doku>acl|documentatie over ACLs]] om de mogelijkheden volledig te begrijpen.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/nl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/nl/lang.php
new file mode 100644
index 000000000..d45bb5907
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/nl/lang.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * dutch language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author François Kooman <fkooman.tuxed.net>
+ * @author Jack van Klaren <dokuwiki@afentoe.xs4all.nl>
+ * @author Riny Heijdendael <riny@heijdendael.nl>
+ * @author Koen Huybrechts <huybkoen@gmail.com>
+ * @author Wouter Schoot <wouter@schoot.org>
+ * @author John de Graaff <john@de-graaff.net>
+ * @author Niels Schoot <niels.schoot@quintiq.com>
+ * @author Dion Nicolaas <dion@nicolaas.net>
+ * @author Danny Rotsaert <danny.rotsaert@edpnet.be>
+ * @author Marijn Hofstra hofstra.m@gmail.com
+ * @author Matthias Carchon webmaster@c-mattic.be
+ */
+$lang['admin_acl'] = 'Toegangsrechten';
+$lang['acl_group'] = 'Groep';
+$lang['acl_user'] = 'Gebruiker';
+$lang['acl_perms'] = 'Permissies voor';
+$lang['page'] = 'Pagina';
+$lang['namespace'] = 'Namespace';
+$lang['btn_select'] = 'Selecteer';
+$lang['p_user_id'] = 'Gebruiker <b class="acluser">%s</b> heeft momenteel de volgende bevoegdheden op pagina <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Gebruiker <b class="acluser">%s</b> heeft momenteel de volgende bevoegdheden op namespace <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Leden van groep <b class="aclgroup">%s</b> hebben momenteel de volgende bevoegdheden op pagina <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Leden van groep <b class="aclgroup">%s</b>hebben momenteel de volgende bevoegdheden op namespace <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Vul een <b>gebruiker of groep</b> in in het bovenstaande formulier om de bevoegdheden te bekijken of te bewerken voor de pagina <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Vul een <b>gebruiker of groep</b> in in het bovenstaande formulier om de bevoegdheden te bekijken of te bewerken voor de namespace <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Let op: Deze permissies zijn niet expliciet ingesteld maar overerfd van andere groepen of hogere namespaces.';
+$lang['p_isadmin'] = 'Let op: De geselecteerde groep of gebruiker heeft altijd volledige toegangsrechten omdat hij als superuser geconfigureerd is.';
+$lang['p_include'] = 'Hogere permissies bevatten ook de lagere. Aanmaken, uploaden en verwijderen gelden alleen voor namespaces, niet voor pagina\'s.';
+$lang['current'] = 'Huidige ACL regels';
+$lang['where'] = 'Pagina/namespace';
+$lang['who'] = 'Gebruiker/Groep';
+$lang['perm'] = 'Bevoegdheden';
+$lang['acl_perm0'] = 'Geen';
+$lang['acl_perm1'] = 'Lezen';
+$lang['acl_perm2'] = 'Bewerken';
+$lang['acl_perm4'] = 'Aanmaken';
+$lang['acl_perm8'] = 'Uploaden';
+$lang['acl_perm16'] = 'Verwijderen';
+$lang['acl_new'] = 'Nieuwe regel toevoegen';
+$lang['acl_mod'] = 'Regel aanpassen';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/no/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/no/help.txt
new file mode 100644
index 000000000..f02b6bdbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/no/help.txt
@@ -0,0 +1,11 @@
+===Lynhjelp===
+
+PÃ¥ denne siden kan du legge til og fjerne tillatelser for navnerom og sider i din wiki.
+
+Venstre panel viser alle tilgjengelige navnerom og sider.
+
+Skjemaet over tillater deg å se og modifisere tillatelser for en valgt bruker eller gruppe.
+
+I tabellen nedenfor vises alle nærværende satte adgangskontroll-regler. Du kan bruke den til raskt å slette eller endre mange regler i slengen.
+
+Å lese [[doku>acl|den offisielle dokumentasjonen for ACL]] kan hjelpe deg å fullt ut forstå hvordan adgangskontroll fungerer i DokuWiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/no/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/no/lang.php
new file mode 100644
index 000000000..cd9e2edfb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/no/lang.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * Norwegian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Reidar Mosvold <Reidar.Mosvold@hit.no>
+ * @author Jorge Barrera Grandon <jorge@digitalwolves.org>
+ * @author Thomas Nygreen <nygreen@gmail.com>
+ * @author Arild Burud <arildb@met.no>
+ * @author Torkill Bruland <torkar-b@online.no>
+ * @author Rune M. Andersen <rune.andersen@gmail.com>
+ * @author Jakob Vad Nielsen (me@jakobnielsen.net)
+ * @author Kjell Tore Næsgaard <kjell.t.nasgaard@ntnu.no>
+ * @author Knut Staring <knutst@gmail.com>
+ * @author Lisa Ditlefsen <lisa@vervesearch.com>
+ * @author Erik Pedersen <erik.pedersen@shaw.ca>
+ * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
+ */
+$lang['admin_acl'] = 'Administrasjon av lister for adgangskontroll (ACL)';
+$lang['acl_group'] = 'Gruppe';
+$lang['acl_user'] = 'Bruker';
+$lang['acl_perms'] = 'Rettigheter for';
+$lang['page'] = 'Side';
+$lang['namespace'] = 'Navnerom';
+$lang['btn_select'] = 'Velg';
+$lang['p_user_id'] = 'Bruker <b class="acluser">%s</b> har for tiden følgende tillatelser i for siden <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Bruker <b class="acluser">%s</b> har for tiden følgende tillatelser i navnerom <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Medlemmer av gruppe <b class="aclgroup">%s</b> har for tiden følgende tillatelser i for siden <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Medlemmer av gruppe <b class="aclgroup">%s</b> har for tiden følgende tillatelser i navnerom <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = '<b>Før inn en bruker eller gruppe</b> i skjemaet over for å vise eller redigere tillatelser satt for siden <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = '<b>Før inn en bruker eller gruppe</b> i skjemaet over for å vise eller redigere tillatelser satt for navnerommet <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Merk: Disse tillatelser ble ikke eksplisitt satt, men ble arvet fra andre grupper eller høyere navnerom.';
+$lang['p_isadmin'] = 'Merk: Den valgte gruppen eller bruker har altid fulle tillatelser fordi vedkommende er konfigurert som superbruker.';
+$lang['p_include'] = 'Høyere tillgangsrettigheter inkluderer lavere. Rettigheter for å opprette, laste opp og slette gjelder bare for navnerom, ikke enkeltsider.';
+$lang['current'] = 'NÃ¥gjeldende ACL-regler';
+$lang['where'] = 'Side/Navnerom';
+$lang['who'] = 'Bruker/Gruppe';
+$lang['perm'] = 'Tillatelser';
+$lang['acl_perm0'] = 'Ingen';
+$lang['acl_perm1'] = 'Lese';
+$lang['acl_perm2'] = 'Redigere';
+$lang['acl_perm4'] = 'Lage';
+$lang['acl_perm8'] = 'Laste opp';
+$lang['acl_perm16'] = 'Slette';
+$lang['acl_new'] = 'Legg til ny oppføring';
+$lang['acl_mod'] = 'Modifiser oppføring';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pl/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pl/help.txt
new file mode 100644
index 000000000..331fd2a7a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pl/help.txt
@@ -0,0 +1,11 @@
+=== Pomoc ===
+
+Na tej stronie możesz zmienić uprawnienia do stron i katalogów w wiki.
+
+Lewy panel pokazuje wszystkie dostępne katalogi i strony.
+
+Formularz powyżej pozwala wyświetlać uprawnienia wybranego użytkownika oraz grupy.
+
+W tabeli poniżej znajdują się wszystkie aktywne reguły dotyczące uprawnień.
+
+Więcej informacji na temat uprawnień w DokuWiki możesz znaleźć w [[doku>acl|oficjalnej dokumentacji uprawnień]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pl/lang.php
new file mode 100644
index 000000000..63a870c50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pl/lang.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * polish language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Grzegorz Żur <grzegorz.zur@gmail.com>
+ * @author Mariusz Kujawski <marinespl@gmail.com>
+ * @author Maciej Kurczewski <pipijajko@gmail.com>
+ * @author SÅ‚awomir Boczek <slawkens@gmail.com>
+ */
+$lang['admin_acl'] = 'ZarzÄ…dzanie uprawnieniami';
+$lang['acl_group'] = 'Grupa';
+$lang['acl_user'] = 'Użytkownik';
+$lang['acl_perms'] = 'Uprawnienia użytkownika';
+$lang['page'] = 'Strona';
+$lang['namespace'] = 'Katalog';
+$lang['btn_select'] = 'Wybierz';
+$lang['p_user_id'] = 'Użytkownik <b class="acluser">%s</b> posiada następujące uprawnienia do strony <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Użytkownik <b class="acluser">%s</b> posiada następujące uprawnienia do katalogów <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Członkowie grupy <b class="aclgroup">%s</b> posiadają następujące uprawnienia do strony <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Członkowie grupy <b class="aclgroup">%s</b> posiadają następujące uprawnienia do strony <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Podaj <b>nazwę użytkownika lub grupy</b> w powyższym formularzu, by wyświetlić lub zmienić uprawnienia do strony <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Podaj <b>nazwę użytkownika lub grupy</b> w powyższym formularzu, by wyświetlić lub zmienić uprawnienia do katalogu <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Uwaga: Uprawnienia nie zostały nadane wprost ale są dziedziczone z grupy lub katalogu.';
+$lang['p_isadmin'] = 'Uwaga: Wybrana grupa lub użytkownika zawsze dysponuje pełnymi uprawnieniami ponieważ posiada uprawnienia administratora.';
+$lang['p_include'] = 'Szersze uprawnienia zawierają węższe. Tworzenie, przesyłanie plików oraz usuwanie mają znaczenie tylko dla katalogów, nie dla stron.';
+$lang['current'] = 'Aktywne reguły zarządzania uprawnieniami';
+$lang['where'] = 'Strona/Katalog';
+$lang['who'] = 'Użytkownik/Grupa';
+$lang['perm'] = 'Uprawnienie';
+$lang['acl_perm0'] = 'Żadne';
+$lang['acl_perm1'] = 'Czytanie';
+$lang['acl_perm2'] = 'Zmiana';
+$lang['acl_perm4'] = 'Tworzenie';
+$lang['acl_perm8'] = 'Przesyłanie plików';
+$lang['acl_perm16'] = 'Usuwanie';
+$lang['acl_new'] = 'Dodaj nowy wpis';
+$lang['acl_mod'] = 'Zmień wpis';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/help.txt
new file mode 100644
index 000000000..b2a49a90d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/help.txt
@@ -0,0 +1,11 @@
+=== Ajuda rápida: ===
+
+Nessa página você pode adicionar e remover permissões para espaços de nomes e páginas do seu wiki.
+
+O painel à esquerda mostra todos os espaços de nomes e páginas disponíveis.
+
+O formulário acima permite a visualização e modificação das permissões de um determinado usuário ou grupo.
+
+Na tabela abaixo são exibidas todas as regras de controle de acesso definidas. Você pode usá-la para excluir ou mudar rapidamente várias regras.
+
+A leitura da [[doku>acl|documentação oficial sobre ACL]] pode ajudar a compreender melhor como o controle de acessos funciona no DokuWiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/lang.php
new file mode 100644
index 000000000..82a19b290
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/lang.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Brazilian Portuguese language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Luis Fernando Enciso <lfenciso@certto.com.br>
+ * @author Alauton/Loug
+ * @author Frederico Gonçalves Guimarães <frederico@teia.bio.br>
+ * @author Felipe Castro <fefcas@gmail.com>
+ * @author Lucien Raven <lucienraven@yahoo.com.br>
+ * @author Enrico Nicoletto <liverig@gmail.com>
+ * @author Flávio Veras <flaviove@gmail.com>
+ * @author Jeferson Propheta <jeferson.propheta@gmail.com>
+ * @author jair.henrique@gmail.com
+ * @author Luis Dantas <luis@dantas.com>
+ * @author Frederico Guimarães <frederico@teia.bio.br>
+ * @author Jair Henrique <jair.henrique@gmail.com>
+ * @author Luis Dantas <luisdantas@gmail.com>
+ */
+$lang['admin_acl'] = 'Administração da Lista de Controles de Acesso';
+$lang['acl_group'] = 'Grupo';
+$lang['acl_user'] = 'Usuário';
+$lang['acl_perms'] = 'Permissões para';
+$lang['page'] = 'Página';
+$lang['namespace'] = 'Espaço de nomes';
+$lang['btn_select'] = 'Selecionar';
+$lang['p_user_id'] = 'O usuário <b class="acluser">%s</b> possui as seguintes permissões na página <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'O usuário <b class="acluser">%s</b> possui as seguintes permissões no espaço de nomes <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Os membros do grupo <b class="aclgroup">%s</b> possuem as seguintes permissões na página <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Os membros do grupo <b class="aclgroup">%s</b> possuem as seguintes permissões no espaço de nomes <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Por favor <b>digite um usuário ou grupo</b> no formulário acima para ver ou editar as permissões para a página <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Por favor <b>digite um usuário ou grupo</b> no formulário acima para ver ou editar as permissões para o espaço de nomes <b class="aclpage">%s</b>.';
+$lang['p_inherited'] = 'Nota: Essas permissões não foram definidas explicitamente, mas sim herdadas de outros grupos ou espaço de nomes superiores.';
+$lang['p_isadmin'] = 'Nota: O grupo ou usuário selecionado sempre tem permissões completas, porque ele está configurado como superusuário.';
+$lang['p_include'] = 'As permissões superiores incluem as inferiores. Permissões para Criar, Enviar e Apagar aplicam-se apenas aos espaços de nomes e não às páginas.';
+$lang['current'] = 'Regras atuais da ACL';
+$lang['where'] = 'Página/Espaço de nomes';
+$lang['who'] = 'Usuário/Grupo';
+$lang['perm'] = 'Permissões';
+$lang['acl_perm0'] = 'Nenhuma';
+$lang['acl_perm1'] = 'Ler';
+$lang['acl_perm2'] = 'Editar';
+$lang['acl_perm4'] = 'Criar';
+$lang['acl_perm8'] = 'Enviar';
+$lang['acl_perm16'] = 'Excluir';
+$lang['acl_new'] = 'Adicionar nova entrada';
+$lang['acl_mod'] = 'Modificar a entrada';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt/help.txt
new file mode 100644
index 000000000..cf4619deb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt/help.txt
@@ -0,0 +1,9 @@
+=== Auxílio Rápido ===
+
+Nesta página podes adicionar e remover permissões para espaço de nomes e páginas no seu wiki.
+
+O painel esquerdo exibe todos os espaço de nomes e páginas. O formulario acima permite a visualização e modificar as permissões de um selecionado utilizador ou grupo.
+
+Na tabela inferior são exibidas todas as actuais regras de controle de acesso. Podes utilisá-la para excluir ou mudar rapidamente várias regras ao mesmo tempo.
+
+A leitura da [[doku>acl|documentação oficial acerca ACL]] pode ajudar a compreender melhor como o controle de acessos funciona no DokuWiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt/lang.php
new file mode 100644
index 000000000..6e094fd74
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt/lang.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Portuguese language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author José Carlos Monteiro <jose.c.monteiro@netcabo.pt>
+ * @author José Monteiro <Jose.Monteiro@DoWeDo-IT.com>
+ * @author Enrico Nicoletto <liverig@gmail.com>
+ * @author Fil <fil@meteopt.com>
+ * @author André Neves <drakferion@gmail.com>
+ */
+$lang['admin_acl'] = 'Gestão de ACLs';
+$lang['acl_group'] = 'Grupo';
+$lang['acl_user'] = 'Utilizador';
+$lang['acl_perms'] = 'Permissão para';
+$lang['page'] = 'Documento';
+$lang['namespace'] = 'Namespace';
+$lang['btn_select'] = 'Selecionar';
+$lang['p_user_id'] = 'O utilizador <b class="acluser">%s</b> tem as seguintes permissões na página <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'O utilizador <b class="acluser">%s</b> tem as seguintes permissões no espaço de nomes <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Os membros do grupo <b class="aclgroup">%s</b> têm as seguintes permissões na página <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Os membros do grupo <b class="aclgroup">%s</b> têm as seguintes permissões no espaço de nomes <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Por favor <b>digite um utilizador ou grupo</b> no formulário acima para ver ou editar as permissões para a página <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Por favor <b>digite um utilizador ou grupo</b> no formulário acima para ver ou editar as permissões para o espaço de nomes <b class="aclpage">%s</b>.';
+$lang['p_inherited'] = 'Nota: Essas permissões não foram definidas explicitamente, mas sim herdadas de outros grupos ou espaço de nomes superiores.';
+$lang['p_isadmin'] = 'Nota: O grupo ou utilizador seleccionado tem sempre permissões completas, porque ele está configurado como superutilizador.';
+$lang['p_include'] = 'As permissões superiores incluem as inferiores. Permissões para Criar, Enviar e Apagar aplicam-se apenas aos espaços de nomes e não às páginas.';
+$lang['current'] = 'Regras Actuais ACL';
+$lang['where'] = 'Página/Espaço de Nomes';
+$lang['who'] = 'Utilizador/Grupo';
+$lang['perm'] = 'Permissões';
+$lang['acl_perm0'] = 'Nenhum';
+$lang['acl_perm1'] = 'Ler';
+$lang['acl_perm2'] = 'Editar';
+$lang['acl_perm4'] = 'Criar';
+$lang['acl_perm8'] = 'Carregar';
+$lang['acl_perm16'] = 'Remover';
+$lang['acl_new'] = 'Adicionar nova entrada';
+$lang['acl_mod'] = 'Modificar Entrada';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ro/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ro/help.txt
new file mode 100644
index 000000000..3f762613c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ro/help.txt
@@ -0,0 +1,11 @@
+=== Quick Help: ===
+
+Pe această pagină puteţi adăuga şi elimina autorizaţiile pentru spaţiile de nume şi paginile din wiki.
+
+Panoul din stânga afişează toate spaţiile de nume şi paginile disponibile.
+
+Formularul de sus vă permite să vedeţi şi să modificaţi autorizaţiile unui anume utilizator sau grup.
+
+In tabelul de jos sunt arătate toate regulile de control a accesului setate. Îl puteţi folosi pentru a şterge sau modifica rapid mai multe reguli.
+
+Consultarea [[doku>acl|official documentation on ACL]] vă poate ajuta să înţelegeţi deplin cum funcţionează controlul accesului în DocuWiki. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ro/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ro/lang.php
new file mode 100644
index 000000000..296baa291
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ro/lang.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Romanian language file
+ *
+ * @author Sergiu Baltariu <s_baltariu@yahoo.com>
+ * @author s_baltariu@yahoo.com
+ * @author Emanuel-Emeric Andrasi <n30@mandrivausers.ro>
+ * @author Emanuel-Emeric Andrași <n30@mandrivausers.ro>
+ * @author Emanuel-Emeric AndraÅŸi <em.andrasi@mandrivausers.ro>
+ * @author Emanuel-Emeric Andrasi <em.andrasi@mandrivausers.ro>
+ */
+$lang['admin_acl'] = 'Managementul Listei de Control a Accesului';
+$lang['acl_group'] = 'Grup';
+$lang['acl_user'] = 'Utilizator';
+$lang['acl_perms'] = 'Autorizare pentru';
+$lang['page'] = 'Pagina';
+$lang['namespace'] = 'Spaţiu de nume';
+$lang['btn_select'] = 'Selectează';
+$lang['p_user_id'] = 'Utilizatorul <b class="acluser">%s</b> are următoarele autorizaţii pe pagină <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Utilizatorul <b class="acluser">%s</b> are următoarele autorizaţii pe spaţiul de nume <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Membrii grupului <b class="aclgroup">%s</b> au următoarele autorizaţii pe pagină <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Membrii grupului <b class="aclgroup">%s</b> au următoarele autorizaţii pe spaţiul de nume <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = '<b>Introduceţi un utilizator sau un grup</b> în formularul de mai sus pentru a vizualiza sau edita autorizaţiile paginii <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = '<b>Introduceţi un utilizator sau un grup</b> în formularul de mai sus pentru a vizualiza sau edita autorizaţiile spaţiului de nume <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Notă: Aceste autorizaţii nu au fost setate explicit ci au fost moştenite de la alte grupuri sau spaţii de nume superioare ierarhic.';
+$lang['p_isadmin'] = 'Notă: Grupul sau utilizatorul selectat are intotdeauna toate autorizatiile întrucât este configurat ca superutilizator.';
+$lang['p_include'] = 'Permisiunile superioare le includ pe cele inferioare. Permisiunile de Creare, Upload şi Ştergere se aplică doar numelor de spaţiu, nu paginilor.';
+$lang['current'] = 'Reguli ACL actuale';
+$lang['where'] = 'Pagină/Spaţiu de nume';
+$lang['who'] = 'Utilizator/Grup';
+$lang['perm'] = 'Autorizaţii';
+$lang['acl_perm0'] = 'Nici una';
+$lang['acl_perm1'] = 'Citire';
+$lang['acl_perm2'] = 'Editare';
+$lang['acl_perm4'] = 'Creare';
+$lang['acl_perm8'] = 'Încărcare';
+$lang['acl_perm16'] = 'Åžtergere';
+$lang['acl_new'] = 'Adaugă intrare nouă';
+$lang['acl_mod'] = 'Modifică intrare';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ru/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ru/help.txt
new file mode 100644
index 000000000..f969151fe
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ru/help.txt
@@ -0,0 +1,11 @@
+=== ÐšÑ€Ð°Ñ‚ÐºÐ°Ñ Ð¡Ð¿Ñ€Ð°Ð²ÐºÐ°: ===
+
+Ðа Ñтой Ñтранице вы можете добавить или удалить права доÑтупа к проÑтранÑтвам имён и Ñтраницам вашей вики.
+
+Ðа панели Ñлева отображены доÑтупные проÑтранÑтва имён и Ñтраницы.
+
+Форма выше позволÑет вам проÑмотреть и изменить права доÑтупа Ð´Ð»Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð¾Ð³Ð¾ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ группы.
+
+Текущие права доÑтупа отображены в таблице ниже. Ð’Ñ‹ можете иÑпользовать её Ð´Ð»Ñ Ð±Ñ‹Ñтрого ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð°Ð²Ð¸Ð».
+
+Прочтение [[doku>acl|официальной документации по ACL]] может помочь вам в полном понимании работы ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸ доÑтупа в DokuWiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ru/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ru/lang.php
new file mode 100644
index 000000000..496e67510
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ru/lang.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Russian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Denis Simakov <akinoame1@gmail.com>
+ * @author Змей ЭтерийÑкий evil_snake@eternion.ru
+ * @author Hikaru Nakajima <jisatsu@mail.ru>
+ * @author Alexei Tereschenko <alexeitlex@yahoo.com>
+ * @author Irina Ponomareva irinaponomareva@webperfectionist.com
+ * @author Alexander Sorkin <kibizoid@gmail.com>
+ * @author Kirill Krasnov <krasnovforum@gmail.com>
+ * @author Vlad Tsybenko <vlad.development@gmail.com>
+ */
+$lang['admin_acl'] = 'Управление ÑпиÑками ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð´Ð¾Ñтупа';
+$lang['acl_group'] = 'Группа';
+$lang['acl_user'] = 'Пользователь';
+$lang['acl_perms'] = 'Права доÑтупа длÑ';
+$lang['page'] = 'Страница';
+$lang['namespace'] = 'ПроÑтранÑтво имен';
+$lang['btn_select'] = 'Выбрать';
+$lang['p_user_id'] = 'Ð¡ÐµÐ¹Ñ‡Ð°Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒ <b class="acluser">%s</b> имеет Ñледующие права на доÑтуп к Ñтранице <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Ð¡ÐµÐ¹Ñ‡Ð°Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒ <b class="acluser">%s</b> имеет Ñледующие права на доÑтуп к проÑтранÑтву имён <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Ð¡ÐµÐ¹Ñ‡Ð°Ñ Ñ‡Ð»ÐµÐ½Ñ‹ группы <b class="aclgroup">%s</b> имеют Ñледующие права на доÑтуп к Ñтранице <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Ð¡ÐµÐ¹Ñ‡Ð°Ñ Ñ‡Ð»ÐµÐ½Ñ‹ группы <b class="aclgroup">%s</b> cимеют Ñледующие права на доÑтуп к проÑтранÑтву имён <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'ПожалуйÑта, <b>введите Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ группу</b> в форме выше, чтобы проÑмотреть или отредактировать права на доÑтуп к Ñтранице <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'ПожалуйÑта, <b>введите Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ группу</b> в форме выше, чтобы проÑмотреть или отредактировать права на доÑтуп к проÑтранÑтву имён <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Замечание: Эти права доÑтупа не были заданы Ñвно, а были унаÑледованы от других групп или проÑтранÑтв имён более выÑокого порÑдка.';
+$lang['p_isadmin'] = 'Замечание: Выбранный пользователь вÑегда имеет полные права так, как он ÑвлÑетÑÑ Ñуперпользователем.';
+$lang['p_include'] = 'Более выÑокие права доÑтупа включают в ÑÐµÐ±Ñ Ð±Ð¾Ð»ÐµÐµ низкие. Права доÑтупа Создание, Загрузка и Удаление отноÑÑÑ‚ÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ к проÑтранÑтвам имён, а не к Ñтраницам.';
+$lang['current'] = 'Текущие права ACL';
+$lang['where'] = 'Страница/ПроÑтранÑтво имён';
+$lang['who'] = 'Пользователь/Группа';
+$lang['perm'] = 'Права доÑтупа';
+$lang['acl_perm0'] = 'Ðет доÑтупа';
+$lang['acl_perm1'] = 'Чтение';
+$lang['acl_perm2'] = 'Правка';
+$lang['acl_perm4'] = 'Создание';
+$lang['acl_perm8'] = 'Загрузка файлов';
+$lang['acl_perm16'] = 'Удаление';
+$lang['acl_new'] = 'Добавить новую запиÑÑŒ';
+$lang['acl_mod'] = 'Отредактировать запиÑÑŒ';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sk/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sk/help.txt
new file mode 100644
index 000000000..1167bf5e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sk/help.txt
@@ -0,0 +1,11 @@
+=== Krátka nápoveda: ===
+
+Na tejto stránke môžete pridávať alebo rušiť oprávnenia pre menné priestory a stránky vo Vašej wiki.
+
+Ľavý panel zobrazuje všetky dostupné menné priestory a stránky.
+
+Formulár zobrazený vyššie Vam dovoľuje prehliadať a meniť oprávnenia pre vybraného používateľa alebo skupinu.
+
+V tabuľke nižšie sú zobrazené všetky aktuálne prístupové pravidlá. Môžete v nej rýchlo rušiť alebo meniť viacero pravidiel naraz.
+
+PreÄítanie [[doku>acl|oficiálnej dokumentácie ACL]] Vám môže pomôcÅ¥ plne pochopiÅ¥ spôsob ako fungujú prístupové pravidlá (oprávnenia) v DokuWiki. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sk/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sk/lang.php
new file mode 100644
index 000000000..398f8c63d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sk/lang.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * Slovak language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Ondrej Vegh <ov@vsieti.sk>
+ * @author Michal Mesko <michal.mesko@gmail.com>
+ * @author exusik@gmail.com
+ * @author Martin Michalek <michalek.dev@gmail.com>
+ */
+$lang['admin_acl'] = 'Správa zoznamu prístupových práv';
+$lang['acl_group'] = 'Skupina';
+$lang['acl_user'] = 'Užívateľ';
+$lang['acl_perms'] = 'Práva pre';
+$lang['page'] = 'Stránka';
+$lang['namespace'] = 'Menný priestor';
+$lang['btn_select'] = 'Vybrať';
+$lang['p_user_id'] = 'Používateľ <b class="acluser">%s</b> má aktuálne nasledujúce oprávnenia k stránke <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Používateľ <b class="acluser">%s</b> má aktuálne nasledujúce oprávnenia v mennom priestore <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Členovia skupiny <b class="aclgroup">%s</b> majú aktuálne nasledujúce oprávnenia k stránke <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Členovia skupiny <b class="aclgroup">%s</b> majú aktuálne nasledujúce oprávnenia v mennom priestore <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Prosím <b>zadajte používateľa alebo skupinu</b> do formulára zobrazeného vyššie, aby ste mohli prezerať alebo meniť oprávnenia k stránke <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Prosím <b>zadajte používateľa alebo skupinu</b> do formulára zobrazeného vyššie, aby ste mohli prezerať alebo meniť oprávnenia v mennom priestore <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Poznámka: Tieto oprávnenia neboli nastavené explicitne, ale boli odvodené z inej skupiny alebo nadradeného menného priestoru.';
+$lang['p_isadmin'] = 'Poznámka: Vybraná skupina alebo používateľ má vždy najvyššie oprávnenia, pretože je vedená/vedený ako správca.';
+$lang['p_include'] = 'Vyššie oprávnenia zahŕňajú nižšie. Oprávnenie Vytvoriť, Nahrať a Zmazať sa vzťahujú iba k menným priestorom, nie ku stránkam.';
+$lang['current'] = 'Aktuálne pravidlá prístupu (ACL)';
+$lang['where'] = 'Stránka/Menný priestor';
+$lang['who'] = 'Používateľ/Skupina';
+$lang['perm'] = 'Povolenia';
+$lang['acl_perm0'] = 'Žiadne';
+$lang['acl_perm1'] = 'Čítať';
+$lang['acl_perm2'] = 'Zmeniť';
+$lang['acl_perm4'] = 'Vytvoriť';
+$lang['acl_perm8'] = 'Nahrať súbor';
+$lang['acl_perm16'] = 'Zmazať';
+$lang['acl_new'] = 'Pridať nový záznam';
+$lang['acl_mod'] = 'Upraviť záznam';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sl/lang.php
new file mode 100644
index 000000000..32141fbce
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sl/lang.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Slovenian language file
+ *
+ * @author Dejan Levec <webphp@gmail.com>
+ * @author BoÅ¡tjan SeniÄar <senicar@gmail.com>
+ */
+$lang['acl_group'] = 'Skupina';
+$lang['acl_user'] = 'Uporabnik';
+$lang['acl_perms'] = 'Dovoljenja za';
+$lang['page'] = 'Stran';
+$lang['btn_select'] = 'Izberi';
+$lang['who'] = 'Uporabnik/Skupina';
+$lang['perm'] = 'Dovoljenja';
+$lang['acl_perm1'] = 'Preberi';
+$lang['acl_perm2'] = 'Uredi';
+$lang['acl_perm4'] = 'Ustvari';
+$lang['acl_perm8'] = 'Naloži';
+$lang['acl_perm16'] = 'Zbriši';
+$lang['acl_new'] = 'Dodaj nov zapis';
+$lang['acl_mod'] = 'Spremeni zapis';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sr/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sr/help.txt
new file mode 100644
index 000000000..0ec8921d4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sr/help.txt
@@ -0,0 +1,11 @@
+=== Приручна помоћ: ===
+
+Ðа овој Ñтрани можете додати или уклонити дозволе за Ñтранице и именÑке проÑторе на Вашем викију.
+
+Леви панел приказује Ñве доÑтупне именÑке проÑторе и Ñтранице.
+
+Формулар изнад омогућава приказ и измену дозвола за одабране кориÑнике или групе.
+
+У табели иÑпод Ñу приказане Ñве тренутно поÑтављене дозволе. Можете је кориÑтити за брзо бриÑање или измену више правила.
+
+Читање [[doku>acl|званичне документације о ACL]] Вам може помоћи у потпуном разумевању рада дозвола приÑтупа у DokuWiki-ју.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sr/lang.php
new file mode 100644
index 000000000..6e1649992
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sr/lang.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * serbian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Filip Brcic <brcha@users.sourceforge.net>
+ * @author Иван Петровић petrovicivan@ubuntusrbija.org
+ * @author Ivan Petrovic <petrovicivan@ubuntusrbija.org>
+ */
+$lang['admin_acl'] = 'Управљање лиÑтом контроле приÑтупа';
+$lang['acl_group'] = 'Група';
+$lang['acl_user'] = 'КориÑник';
+$lang['acl_perms'] = 'Дозволе за';
+$lang['page'] = 'Страница';
+$lang['namespace'] = 'ИменÑки проÑтор';
+$lang['btn_select'] = 'Одабери';
+$lang['p_user_id'] = 'КориÑник <b class="acluser">%s</b> тренутно има Ñледеће дозволе за ову Ñтраницу <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'КориÑник <b class="acluser">%s</b> тренутно има Ñледеће дозволе за овај именÑки проÑтор <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Чланови групе <b class="acluser">%s</b> тренутно имају Ñледеће дозволе за ову Ñтраницу <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Чланови групе <b class="acluser">%s</b> тренутно имају Ñледеће дозволе за овај именÑки проÑтор <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Молим Ð’Ð°Ñ <b>унеÑите кориÑника или групу</b> у формулар изнад да биÑте приказали или изменили дозволе за Ñтраницу <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Молим Ð’Ð°Ñ <b>унеÑите кориÑника или групу</b> у формулар изнад да биÑте приказали или изменили дозволе за именÑки проÑтор <b class="aclpage">%s</b>.';
+$lang['p_inherited'] = 'Ðапомена: Ове дозволе Ñе не поÑтављају екÑплицитно већ Ñамо тамо где Ñе не Ñударају Ñа оÑталим групама или вишем иманÑком проÑтору.';
+$lang['p_isadmin'] = 'Ðапомена: Одабран кориÑник или група има увек пуне дозволе јер је поÑтављен за ÑуперкориÑника.';
+$lang['p_include'] = 'Више дозволе укључују ниже. Дозволе одавања, Ñлања и бриÑања ће бити примењене Ñамо на именÑке проÑторе, не и на Ñтране.';
+$lang['current'] = 'Тренутна правила проÑтупа';
+$lang['where'] = 'Страница/ИменÑки проÑтор';
+$lang['who'] = 'КориÑник/Група';
+$lang['perm'] = 'Дозволе';
+$lang['acl_perm0'] = 'Ðишта';
+$lang['acl_perm1'] = 'Читање';
+$lang['acl_perm2'] = 'Измена';
+$lang['acl_perm4'] = 'Прављење';
+$lang['acl_perm8'] = 'Слање';
+$lang['acl_perm16'] = 'БриÑање';
+$lang['acl_new'] = 'Додај нови уноÑ';
+$lang['acl_mod'] = 'Измени уноÑ';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sv/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sv/help.txt
new file mode 100644
index 000000000..5ba770fa0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sv/help.txt
@@ -0,0 +1,8 @@
+=== Hjälp ===
+På den här sidan kan du lägga till och ta bort åtkomsträttigheter för namnrymder och enstaka sidor i din wiki.
+
+Till vänster visas alla tillgängliga namnrymder och sidor du kan välja. I formuläret ovanför kan du sedan välja användare eller grupp för vilken åtkomsträttigheterna ska visas eller ändras.
+
+Tabellen nedanför visar samtliga uppsatta regler för åtkomsträttigheter. Den kan du använda för att snabbt ta bort eller ändra flera regler på en gång.
+
+Läs gärna [[doku>acl|den officiella dokumentationen för ACL]] som kan hjälpa dig till fullo förstå hur åtkomsträttigheter fungerar i DokuWiki. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sv/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sv/lang.php
new file mode 100644
index 000000000..b5fd3b866
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sv/lang.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * swedish language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Per Foreby <per@foreby.se>
+ * @author Nicklas Henriksson <nicklas[at]nihe.se>
+ * @author HÃ¥kan Sandell <hakan.sandell[at]mydata.se>
+ * @author Dennis Karlsson
+ * @author Tormod Otter Johansson <tormod@latast.se>
+ * @author emil@sys.nu
+ * @author Pontus Bergendahl <pontus.bergendahl@gmail.com>
+ * @author Tormod Johansson tormod.otter.johansson@gmail.com
+ * @author Emil Lind <emil@sys.nu>
+ * @author Bogge Bogge <bogge@bogge.com>
+ * @author Peter Åström <eaustreum@gmail.com>
+ * @author HÃ¥kan Sandell <hakan.sandell@home.se>
+ */
+$lang['admin_acl'] = 'Hantera behörighetslistan (ACL)';
+$lang['acl_group'] = 'Grupp';
+$lang['acl_user'] = 'Användare';
+$lang['acl_perms'] = 'Behörighet för';
+$lang['page'] = 'Sida';
+$lang['namespace'] = 'Namnrymd';
+$lang['btn_select'] = 'Välj';
+$lang['p_user_id'] = 'Användaren <b class="acluser">%s</b> har förnärvarande följande rättigheter på sidan <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Användaren <b class="acluser">%s</b> har för närvarande följande rättigheter i namnrymden <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Medlemmar av gruppen <b class="aclgroup">%s</b> har för närvarande följande rättigheter på sidan <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Medlemmar av gruppen <b class="aclgroup">%s</b> har för närvarande följande rättigheter i namnrymden <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Vänligen <b>ange en användare eller grupp</b> i formuläret ovan för att visa eller ändra rättigheterna för sidan <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Vänligen <b>ange en användare eller grupp</b> i formuläret ovan för att visa eller ändra rättigheterna för namnrymden <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Notering: De här rättigheterna är inte explicit satta utan var ärvda från andra grupper eller högre namnrymder.';
+$lang['p_isadmin'] = 'Notering: Den valda gruppen eller användaren har alltid fulla rättigheter på grund av att den är konfigurerad som superanvändare.';
+$lang['p_include'] = 'Högre rättigheter inkluderar lägre. Rättigheter för Skapa, Ladda upp och Radera är endast applicerbara namnrymder, inte sidor.';
+$lang['current'] = 'Nuvarande ACL regler';
+$lang['where'] = 'Sida/Namnrymd';
+$lang['who'] = 'Användare/Grupp';
+$lang['perm'] = 'Rättigheter';
+$lang['acl_perm0'] = 'Inga';
+$lang['acl_perm1'] = 'Läsa';
+$lang['acl_perm2'] = 'Redigera';
+$lang['acl_perm4'] = 'Skapa';
+$lang['acl_perm8'] = 'Ladda upp';
+$lang['acl_perm16'] = 'Radera';
+$lang['acl_new'] = 'Lägg till ny behörighet';
+$lang['acl_mod'] = 'Ändra behörighet';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/th/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/th/help.txt
new file mode 100644
index 000000000..52edca93f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/th/help.txt
@@ -0,0 +1,11 @@
+=== ตัวช่วยอย่างเร็ว ===
+
+ในหน้านี้คุณสามารถเพิ่มà¹à¸¥à¸°à¸–อดสิทธิ์สำหรับเนมสเปซ à¹à¸¥à¸°à¹€à¸žà¸ˆà¹ƒà¸™à¸§à¸´à¸à¸´à¸‚องคุณ
+
+à¹à¸–บด้านซ้ายจะà¹à¸ªà¸”งรายชื่อเนมสเปซ à¹à¸¥à¸°à¹€à¸žà¸ˆà¸—ี่มีอยู่ทั้งหมด
+
+à¹à¸šà¸šà¸Ÿà¸­à¸£à¹Œà¸¡à¸‚้างบนอนุà¸à¸²à¸•à¸´à¹ƒà¸«à¹‰à¸„ุณมองเห็น à¹à¸¥à¸°à¹à¸à¹‰à¹„ขสิทธิ์ของผู้ใช้หรือà¸à¸¥à¸¸à¹ˆà¸¡à¸—ี่เลือà¸à¹„ว้ได้
+
+ในตารางด้านล่างได้à¹à¸ªà¸”งà¸à¸à¸„วบคุมà¸à¸²à¸£à¹€à¸‚้าถึงทั้งหมดไว้ คุณสามารถใช้มันลบ หรือเปลี่ยนà¸à¸à¸„รั้งละหลายๆตัวพร้อมà¸à¸±à¸™à¹„ด้อย่างรวดเร็ว
+
+à¸à¸²à¸£à¸­à¹ˆà¸²à¸™ [[doku>acl|official documentation on ACL]] น่าจะช่วยให้คุณเข้าใจวิธีควบคุมà¸à¸²à¸£à¹€à¸‚้าถึงของโดà¸à¸¸à¸§à¸´à¸à¸´à¹„ด้อย่างถ่องà¹à¸—้ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/th/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/th/lang.php
new file mode 100644
index 000000000..472c33cdc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/th/lang.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Thai language file
+ *
+ * @author Komgrit Niyomrath <n.komgrit@gmail.com>
+ * @author Kittithat Arnontavilas mrtomyum@gmail.com
+ * @author Kittithat Arnontavilas <mrtomyum@gmail.com>
+ * @author Thanasak Sompaisansin <jombthep@gmail.com>
+ */
+$lang['admin_acl'] = 'จัดà¸à¸²à¸£à¸£à¸²à¸¢à¸Šà¸·à¹ˆà¸­à¹€à¸žà¸·à¹ˆà¸­à¸„วบคุมà¸à¸²à¸£à¹€à¸‚้าถึง (Access Control List:ACL)';
+$lang['acl_group'] = 'à¸à¸¥à¸¸à¹ˆà¸¡';
+$lang['acl_user'] = 'ผู้ใช้';
+$lang['acl_perms'] = 'สิทธิสำหรับ';
+$lang['page'] = 'เพจ';
+$lang['namespace'] = 'เนมสเปซ';
+$lang['btn_select'] = 'เลือà¸';
+$lang['where'] = 'เพจ/เนมสเปซ';
+$lang['who'] = 'ผู้ใช้/à¸à¸¥à¸¸à¹ˆà¸¡';
+$lang['perm'] = 'สิทธิ์';
+$lang['acl_perm0'] = 'ไร้สิทธิ์';
+$lang['acl_perm1'] = 'อ่าน';
+$lang['acl_perm2'] = 'à¹à¸à¹‰à¹„ข';
+$lang['acl_perm4'] = 'สร้าง';
+$lang['acl_perm8'] = 'อัพโหลด';
+$lang['acl_perm16'] = 'ลบ';
+$lang['acl_new'] = 'เพิ่มเนื้อหาใหม่';
+$lang['acl_mod'] = 'ปรับà¹à¸à¹‰à¹€à¸™à¸·à¹‰à¸­à¸«à¸²';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/tr/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/tr/help.txt
new file mode 100644
index 000000000..b467c5019
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/tr/help.txt
@@ -0,0 +1,11 @@
+=== Hızlı yardım: ===
+
+Bu sayfada Wiki'nizin namespace ve sayfaları için izinleri belirleyebilirsiniz.
+
+Soldaki kısım varolan namespace ve sayfaları listeler.
+
+Yukarıdaki kısım seçilen bir kullanıcı veya grup için izinleri görüp değiştirmenizi sağlar.
+
+Aşağıdaki tablo ise varolan erişim kontrol kurallarını gösterir. Bu tabloyu birden fazla kuralı hızlıca silip değiştirmek için kullanabilirsiniz.
+
+Resmi ACL dökümanını ([[doku>acl|official documentation on ACL]]) okuyarak erişim kontrolünün nasıl çalıştığını öğrenebilirsiniz.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/tr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/tr/lang.php
new file mode 100644
index 000000000..45fbe7489
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/tr/lang.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * turkish language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Selim FarsakoÄŸlu <farsakogluselim@yahoo.de>
+ * @author Aydın Coşkuner aydinweb@gmail.com
+ * @author Aydın Coşkuner <aydinweb@gmail.com>
+ * @author yavuzselim@gmail.com
+ * @author Cihan Kahveci kahvecicihan@gmail.com
+ * @author Yavuz Selim <yavuzselim@gmail.com>
+ */
+$lang['admin_acl'] = 'Erişim Kontrol Listesi (ACL) Yönetimi';
+$lang['acl_group'] = 'Grup';
+$lang['acl_user'] = 'Kullanıcı';
+$lang['acl_perms'] = 'Şunun için yetkiler:';
+$lang['page'] = 'Sayfa';
+$lang['namespace'] = 'Namespace';
+$lang['btn_select'] = 'Seç';
+$lang['p_user_id'] = '<b class="acluser">%s</b> kullanıcısının şu anda <b class="aclpage">%s</b> sayfası için yetkisi: <i>%s</i>.';
+$lang['p_user_ns'] = '<b class="acluser">%s</b> kullanıcısının şu anda <b class="aclns">%s</b> namesapace\'i için yetkisi: <i>%s</i>.';
+$lang['p_group_id'] = '<b class="aclgroup">%s</b> grubunun şu anda <b class="aclpage">%s</b> sayfası için yetkisi: <i>%s</i>.';
+$lang['p_group_ns'] = '<b class="aclgroup">%s</b> grubunun şu anda <b class="aclns">%s</b> namesapace\'i için yetkisi: <i>%s</i>.';
+$lang['p_choose_id'] = 'Lütfen <b class="aclpage">%s</b> sayfasına izin verilen yetkilerini görmek veya değiştirmek için yukarıdaki forma <b>bir kullanıcı veya grup adı</b> girin.';
+$lang['p_choose_ns'] = 'Lütfen <b class="aclpage">%s</b> namespace\'ie izin verilen yetkileri görmek veya değiştirmek için yukarıdaki forma <b>bir kullanıcı veya grup adı</b> girin.';
+$lang['p_inherited'] = 'Not: Bu izinler doğrudan ayarlanmadan başka grup veya üst namespace\'lerden gelmektedir.';
+$lang['p_isadmin'] = 'Not: Seçili grup veya kullanıcı, "Ana kullanıcı" olarak atandığından tüm izinlere sahiptir.';
+$lang['p_include'] = 'Üst seviye izinler alt izinleri içermektedir. Oluşturma, Yükleme ve Silme yetkisi sadece namespace\'e uygulanmaktadır. Bu yetki sayfalara uygulanmaz.';
+$lang['current'] = 'Şimdiki ACL(İzin Kontrol listesi) kuralları';
+$lang['where'] = 'Sayfa/Namespace';
+$lang['who'] = 'Kullanıcı/Grup';
+$lang['perm'] = 'Ä°zinler';
+$lang['acl_perm0'] = 'Yok';
+$lang['acl_perm1'] = 'Okuma';
+$lang['acl_perm2'] = 'DeÄŸiÅŸtirme';
+$lang['acl_perm4'] = 'OluÅŸturma';
+$lang['acl_perm8'] = 'Yükleme';
+$lang['acl_perm16'] = 'Silme';
+$lang['acl_new'] = 'Yeni giriÅŸ ekle';
+$lang['acl_mod'] = 'Eski giriÅŸi deÄŸiÅŸtirme';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/uk/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/uk/help.txt
new file mode 100644
index 000000000..d16af0aa9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/uk/help.txt
@@ -0,0 +1,11 @@
+=== Швидка довідка: ===
+
+Ðа цій Ñторінці ви можете додавати чи знищувати права доÑтупу Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñторів імен чи Ñторінок вашої вікі.
+
+Ліва панель показує вÑÑ– доÑтупні проÑтори імен Ñ– Ñторінки.
+
+Ð’ÐµÑ€Ñ…Ð½Ñ Ñ„Ð¾Ñ€Ð¼Ð° дозволÑÑ” переглÑнути Ñ– редагувати права доÑтупу Ð´Ð»Ñ Ð¾Ð±Ñ€Ð°Ð½Ð¾Ð³Ð¾ кориÑтувача чи групи
+
+Ð’ таблиці знизу показані вÑÑ– оголошені правила доÑтупу. Можете Ñ—Ñ— викориÑтовувати Ð´Ð»Ñ ÑˆÐ²Ð¸Ð´ÐºÐ¾Ð³Ð¾ Ð·Ð½Ð¸Ñ‰ÐµÐ½Ð½Ñ Ñ‡Ð¸ модифікації кількох правил.
+
+Додаткова допомога в [[doku>acl|офіційній документації по ACL]] допоможе вам більше зрозуміти Ñк працює контроль доÑтупу у ДокуВікі. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/uk/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/uk/lang.php
new file mode 100644
index 000000000..dc3e6a963
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/uk/lang.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * ukrainian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Oleksiy Voronin <ovoronin@gmail.com>
+ * @author serg_stetsuk@ukr.net
+ * @author okunia@gmail.com
+ * @author Oleksandr Kunytsia <okunia@gmail.com>
+ * @author Uko uko@uar.net
+ */
+$lang['admin_acl'] = 'ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ ÑпиÑками контролю доÑтупу';
+$lang['acl_group'] = 'Група';
+$lang['acl_user'] = 'КориÑтувач';
+$lang['acl_perms'] = 'Права доÑтупу длÑ';
+$lang['page'] = 'Сторінка';
+$lang['namespace'] = 'ПроÑÑ‚Ñ–Ñ€ імен';
+$lang['btn_select'] = 'Вибрати';
+$lang['p_user_id'] = 'КориÑтувач <b class="acluser">%s</b> зараз має такі права доÑтупу до Ñторінки <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'КориÑтувач <b class="acluser">%s</b> зараз має такі права доÑтупу до проÑтору імен <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Члени групи <b class="aclgroup">%s</b> зараз мають такі права Ð´Ð»Ñ Ñторінки <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Члени групи <b class="aclgroup">%s</b> зараз мають такі права доÑтупу до проÑтору імен <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Будь-лаÑка <b>введіть кориÑтувача або групу<b> в поле зверху, щоб подивитиÑÑ Ñ‡Ð¸ змінити права доÑтупу до Ñторінки <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Будь-лаÑка <b>введіть кориÑтувача або групу<b> у вікно зверху, щоб подивитиÑÑ Ñ‡Ð¸ змінити права доÑтупу до Ñторінки <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Зверніть увагу! Права доÑтупу, не вÑтановлені Ñвно, наÑлідуютьÑÑ Ð²Ñ–Ð´ інших груп чи вищих проÑторів імен.';
+$lang['p_isadmin'] = 'Зверніть увагу! Обрані група чи кориÑтувач завжди мають повні права доÑтупу, оÑкільки вони Ñ” ÑуперкориÑтувачами.';
+$lang['p_include'] = 'Старші права доÑтупу включають молодші. СтвореннÑ, Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ– Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð·Ð°ÑтоÑовні лише до проÑторів імен.';
+$lang['current'] = 'Поточні правила ACL';
+$lang['where'] = 'Сторінка/ПроÑÑ‚Ñ–Ñ€ імен';
+$lang['who'] = 'КориÑтувач/Група';
+$lang['perm'] = 'Права доÑтупу';
+$lang['acl_perm0'] = 'Жодних';
+$lang['acl_perm1'] = 'ЧитаннÑ';
+$lang['acl_perm2'] = 'РедагуваннÑ';
+$lang['acl_perm4'] = 'СтвореннÑ';
+$lang['acl_perm8'] = 'ЗавантаженнÑ';
+$lang['acl_perm16'] = 'ВилученнÑ';
+$lang['acl_new'] = 'Додати новий запиÑ';
+$lang['acl_mod'] = 'Змінити запиÑ';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/vi/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/vi/lang.php
new file mode 100644
index 000000000..4458d806b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/vi/lang.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * vietnamese language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author James Do <jdo@myrealbox.com>
+ */
+
+$lang['admin_acl'] = 'Quản lý phép truy nhật {Access Control List}';
+$lang['acl_group'] = 'Nhóm';
+$lang['acl_user'] = 'NgÆ°á»i';
+$lang['acl_perms'] = 'Phép truy nhập cho';
+$lang['page'] = 'Trang';
+$lang['namespace'] = 'Không gian tên';
+
+$lang['acl_perm1'] = 'Äá»c';
+$lang['acl_perm2'] = 'Biên soạn';
+$lang['acl_perm4'] = 'Tạo';
+$lang['acl_perm8'] = 'Tải lên';
+$lang['acl_new'] = 'Thêm mục mới';
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/help.txt
new file mode 100644
index 000000000..871c1f4f1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/help.txt
@@ -0,0 +1,11 @@
+=== 快速指å—: ===
+
+在此é é¢ä½ å¯ä»¥ç‚ºä½ çš„wiki中的namespace以åŠé é¢å¢žåŠ æˆ–移除權é™
+
+左方的é¢æ¿é¡¯ç¤ºäº†æ‰€æœ‰çš„namespace以åŠé é¢
+
+上方的表格å…許你觀看以åŠä¿®æ”¹è¢«é¸æ“‡çš„使用者或群組的權é™
+
+下方的表格顯示了目å‰æ‰€æœ‰çš„å­˜å–控制è¦å‰‡(ACL) ä½ å¯ä»¥ä½¿ç”¨å®ƒå¿«é€Ÿçš„刪除或更改多項è¦å‰‡
+
+閱讀 [[doku>acl|official documentation on ACL]] 也許å¯ä»¥å¹«åŠ©ä½ åŽ»å®Œæ•´åœ°äº†è§£åœ¨DokuWiki中, å­˜å–控制是如何é‹ä½œçš„.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/lang.php
new file mode 100644
index 000000000..d64e85a92
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/lang.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * Chinese(Traditional) language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author chinsan <chinsan@mail2000.com.tw>
+ * @author Li-Jiun Huang <ljhuang.tw@gmail.com>
+ * @author http://www.chinese-tools.com/tools/converter-simptrad.html
+ * @author Wayne San <waynesan@zerozone.tw>
+ * @author Li-Jiun Huang <ljhuang.tw@gmai.com>
+ * @author Cheng-Wei Chien <e.cwchien@gmail.com>
+ */
+$lang['admin_acl'] = '設定 ACL å­˜å–åå–®';
+$lang['acl_group'] = '群組';
+$lang['acl_user'] = '帳號';
+$lang['acl_perms'] = '設定權é™æ–¼';
+$lang['page'] = 'é é¢';
+$lang['namespace'] = '命å空間';
+$lang['btn_select'] = 'é¸æ“‡';
+$lang['p_user_id'] = '使用者 <b class="acluser">%s</b> 在é é¢ <b class="aclpage">%s</b>ç›®å‰æ“有以下的權é™: <i>%s</i>.';
+$lang['p_user_ns'] = '用戶 <b class=\"acluser\">%s</b> 當å‰åœ¨å‘½å空間 <b class=\"aclns\">%s</b> æ“有以下權é™ï¼š<i>%s</i>。';
+$lang['p_group_id'] = '群組 <b class="aclgroup">%s</b> çš„æˆå“¡ç›®å‰å°æ–¼é é¢ <b class="aclpage">%s</b> æ“有以下的權é™: <i>%s</i>.';
+$lang['p_group_ns'] = '<b class=\"aclgroup\">%s</b> 組æˆå“¡ç•¶å‰åœ¨å‘½å空間 <b class=\"aclns\">%s</b> æ“有以下權é™ï¼š<i>%s</i>。';
+$lang['p_choose_id'] = '請在上方的表格中 <b>輸入一個帳號或群組</b> 來觀看或編輯é é¢ <b class="aclpage">%s</b> 的權é™.';
+$lang['p_choose_ns'] = '請在上表中<b>輸入用戶å或組å稱</b>,來查看或編輯命å空間 <b class=\"aclns\">%s</b> 的權é™è¨­ç½®ã€‚';
+$lang['p_inherited'] = '請注æ„:這些權é™ä¸¦æ²’有明確設定,而是從其他組或更高級的å稱空間繼承而來。';
+$lang['p_isadmin'] = '請注æ„:é¸å®šçš„組或用戶æ“有完全權é™ï¼Œå› ç‚ºå®ƒè¢«è¨­å®šç‚ºè¶…級用戶。';
+$lang['p_include'] = '較高的權é™äº¦åŒ…å«äº†è¼ƒä½Žçš„權é™ã€‚新增ã€ä¸Šå‚³èˆ‡åˆªé™¤æ¬Šé™åªèƒ½åœ¨å‘½å空間中使用,而éžé é¢ã€‚';
+$lang['current'] = 'ç›®å‰çš„ACLè¦å‰‡';
+$lang['where'] = 'é é¢/命å空間';
+$lang['who'] = '使用者/群組';
+$lang['perm'] = '權é™';
+$lang['acl_perm0'] = 'ç„¡';
+$lang['acl_perm1'] = '讀å–權é™';
+$lang['acl_perm2'] = '編輯é é¢';
+$lang['acl_perm4'] = '新增é é¢';
+$lang['acl_perm8'] = '上傳圖檔';
+$lang['acl_perm16'] = '刪除檔案';
+$lang['acl_new'] = '新增管ç†è¦å‰‡';
+$lang['acl_mod'] = '修改è¦å‰‡';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh/help.txt
new file mode 100644
index 000000000..526dcee9b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh/help.txt
@@ -0,0 +1,11 @@
+=== 快速帮助 ===
+
+本页中您å¯ä»¥æ·»åŠ æˆ–移除命å空间或页é¢çš„æƒé™ã€‚
+
+左边的窗格显示的是全部å¯ç”¨çš„命å空间和页é¢ã€‚
+
+您å¯ä»¥åœ¨ä¸Šæ–¹çš„表格中查看并修改选定用户或组的æƒé™ã€‚
+
+下方的表格中显示的是当å‰è®¾ç½®çš„全部访问控制规则。 您å¯ä»¥é€šè¿‡å®ƒå¿«é€Ÿåˆ é™¤æˆ–更改多æ¡è§„则。
+
+å‚阅 [[doku>acl|official documentation on ACL]] 能帮助您完整地ç†è§£ DokuWiki 中的访问控制是如何工作的。
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh/lang.php
new file mode 100644
index 000000000..6ae32b01c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh/lang.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Chinese(Simplified) language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author ZDYX <zhangduyixiong@gmail.com>
+ * @author http://www.chinese-tools.com/tools/converter-tradsimp.html
+ * @author George Sheraton guxd@163.com
+ * @author Simon zhan <simonzhan@21cn.com>
+ * @author mr.jinyi@gmail.com
+ */
+$lang['admin_acl'] = '访问控制列表(ACL)管ç†å™¨';
+$lang['acl_group'] = '组';
+$lang['acl_user'] = '用户';
+$lang['acl_perms'] = '许å¯ç»™';
+$lang['page'] = '页é¢';
+$lang['namespace'] = '命å空间';
+$lang['btn_select'] = 'é¸æ“‡';
+$lang['p_user_id'] = '用户 <b class="acluser">%s</b> 当å‰åœ¨é¡µé¢ <b class="aclpage">%s</b> 拥有以下æƒé™ï¼š<i>%s</i>。';
+$lang['p_user_ns'] = '用户 <b class="acluser">%s</b> 当å‰åœ¨å‘½å空间 <b class="aclns">%s</b> 拥有以下æƒé™ï¼š<i>%s</i>。';
+$lang['p_group_id'] = '<b class="aclgroup">%s</b> 组æˆå‘˜å½“å‰åœ¨é¡µé¢ <b class="aclpage">%s</b> 拥有以下æƒé™ï¼š<i>%s</i>。';
+$lang['p_group_ns'] = '<b class="aclgroup">%s</b> 组æˆå‘˜å½“å‰åœ¨å‘½å空间 <b class="aclns">%s</b> 拥有以下æƒé™ï¼š<i>%s</i>。';
+$lang['p_choose_id'] = '请在上表中<b>输入用户å或组å称</b>,æ¥æŸ¥çœ‹æˆ–ç¼–è¾‘é¡µé¢ <b class="aclpage">%s</b> çš„æƒé™è®¾ç½®ã€‚';
+$lang['p_choose_ns'] = '请在上表中<b>输入用户å或组å称</b>,æ¥æŸ¥çœ‹æˆ–编辑命å空间 <b class="aclns">%s</b> çš„æƒé™è®¾ç½®ã€‚';
+$lang['p_inherited'] = '请注æ„:这些æƒé™å¹¶æ²¡æœ‰æ˜Žç¡®è®¾å®šï¼Œè€Œæ˜¯ä»Žå…¶ä»–组或更高级的å称空间继承而æ¥ã€‚';
+$lang['p_isadmin'] = '请注æ„:选定的组或用户拥有完全æƒé™ï¼Œå› ä¸ºå®ƒè¢«è®¾å®šä¸ºè¶…级用户。';
+$lang['p_include'] = '高æƒé™åŒ…å«ä½Žæƒé™ã€‚创建ã€ä¸Šä¼ å’Œåˆ é™¤æƒé™åªèƒ½åº”用于å称空间,而ä¸æ˜¯å•ä¸ªé¡µé¢ã€‚';
+$lang['current'] = 'å½“å‰ ACL 规则';
+$lang['where'] = '页é¢/命å空间';
+$lang['who'] = '用户/组';
+$lang['perm'] = 'æƒé™';
+$lang['acl_perm0'] = 'æ— ';
+$lang['acl_perm1'] = '读å–';
+$lang['acl_perm2'] = '编辑';
+$lang['acl_perm4'] = '创建';
+$lang['acl_perm8'] = '上传';
+$lang['acl_perm16'] = '删除';
+$lang['acl_new'] = '添加新æ¡ç›®';
+$lang['acl_mod'] = '编辑æ¡ç›®';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/group.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/group.png
new file mode 100644
index 000000000..7fb4e1f1e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/group.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/ns.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/ns.png
new file mode 100644
index 000000000..da3c2a2d7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/ns.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/page.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/page.png
new file mode 100644
index 000000000..03ddd799f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/page.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/user.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/user.png
new file mode 100644
index 000000000..8fd539e9c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/user.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/script.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/script.js
new file mode 100644
index 000000000..21f161a97
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/script.js
@@ -0,0 +1,163 @@
+acl = {
+ init: function(){
+ this.ctl = DOKUid('acl_manager');
+ if(!this.ctl) return;
+
+ var sel = DOKUid('acl__user').getElementsByTagName('select')[0];
+
+ addEvent(sel,'change',acl.userselhandler);
+ addEvent(DOKUid('acl__tree'),'click',acl.treehandler);
+ addEvent(DOKUid('acl__user').getElementsByTagName('input')[1],'click',acl.loadinfo);
+ },
+
+
+ /**
+ * Handle user dropdown
+ */
+ userselhandler: function(e){
+ // make entry field visible/invisible
+ if(this.value == '__g__' || this.value == '__u__'){
+ DOKUid('acl__user').getElementsByTagName('input')[0].style.display = ''; //acl_w
+ DOKUid('acl__user').getElementsByTagName('input')[1].style.display = ''; //submit
+ }else{
+ DOKUid('acl__user').getElementsByTagName('input')[0].style.display = 'none';
+ DOKUid('acl__user').getElementsByTagName('input')[1].style.display = 'none';
+ }
+
+ acl.loadinfo();
+ },
+
+ /**
+ * Load the current permission info and edit form
+ *
+ * @param frm - Form element with needed data
+ */
+ loadinfo: function(){
+ // get form
+ var frm = DOKUid('acl__detail').getElementsByTagName('form')[0];
+
+ // prepare an AJAX call
+ var ajax = new sack(DOKU_BASE + 'lib/plugins/acl/ajax.php');
+ ajax.AjaxFailedAlert = '';
+ ajax.encodeURIString = false;
+ if(ajax.failed) return true;
+
+ // prepare data
+ var data = Array();
+ data[0] = ajax.encVar('ns',frm.elements['ns'].value);
+ data[1] = ajax.encVar('id',frm.elements['id'].value);
+ data[2] = ajax.encVar('acl_t',frm.elements['acl_t'].value);
+ data[3] = ajax.encVar('acl_w',frm.elements['acl_w'].value);
+ data[4] = ajax.encVar('sectok',frm.elements['sectok'].value);
+ data[5] = ajax.encVar('ajax','info');
+
+ ajax.elementObj = DOKUid('acl__info');
+
+ ajax.runAJAX(data.join('&'));
+ return false;
+ },
+
+ /**
+ * parse URL attributes into a associative array
+ *
+ * @todo put into global script lib?
+ */
+ parseatt: function(str){
+ if(str[0] == '?') str = str.substr(1);
+ var attributes = {};
+ var all = str.split('&');
+ for(var i=0; i<all.length; i++){
+ var att = all[i].split('=');
+ attributes[att[0]] = decodeURIComponent(att[1]);
+ }
+ return attributes;
+ },
+
+ /**
+ * htmlspecialchars equivalent
+ *
+ * @todo put in gloabl scripts lib?
+ */
+ hsc: function(str) {
+ str = str.replace(/&/g,"&amp;");
+ str = str.replace(/\"/g,"&quot;");
+ str = str.replace(/\'/g,"&#039;");
+ str = str.replace(/</g,"&lt;");
+ str = str.replace(/>/g,"&gt;");
+ return str;
+ },
+
+
+ /**
+ * Open or close a subtree using AJAX
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ treetoggle: function(clicky){
+ var listitem = clicky.parentNode.parentNode;
+
+ // if already open, close by removing the sublist
+ var sublists = listitem.getElementsByTagName('ul');
+ if(sublists.length){
+ listitem.removeChild(sublists[0]);
+ clicky.src = DOKU_BASE+'lib/images/plus.gif';
+ clicky.alt = '+';
+ return false;
+ }
+
+ // get the enclosed link (is always the first one)
+ var link = listitem.getElementsByTagName('a')[0];
+
+ // prepare an AJAX call to fetch the subtree
+ var ajax = new sack(DOKU_BASE + 'lib/plugins/acl/ajax.php');
+ ajax.AjaxFailedAlert = '';
+ ajax.encodeURIString = false;
+ if(ajax.failed) return true;
+
+ //prepare the new ul
+ var ul = document.createElement('ul');
+ listitem.appendChild(ul);
+ ajax.elementObj = ul;
+ ajax.runAJAX(link.search.substr(1)+'&ajax=tree');
+ clicky.src = DOKU_BASE+'lib/images/minus.gif';
+ return false;
+ },
+
+ /**
+ * Handles all clicks in the tree, dispatching the right action based on the
+ * clicked element
+ */
+ treehandler: function(e){
+ if(e.target.src){ // is it an image?
+ acl.treetoggle(e.target);
+ } else if(e.target.href){ // is it a link?
+ // remove highlighting
+ var obj = getElementsByClass('cur',DOKUid('acl__tree'),'a');
+ for(var i=0; i<obj.length; i++){
+ obj[i].className = obj[i].className.replace(/ cur/,'');
+ }
+
+ // add new highlighting
+ e.target.className += ' cur';
+
+ // set new page to detail form
+ var frm = DOKUid('acl__detail').getElementsByTagName('form')[0];
+ if(e.target.className.search(/wikilink1/) > -1){
+ frm.elements['ns'].value = '';
+ frm.elements['id'].value = acl.hsc(acl.parseatt(e.target.search)['id']);
+ }else if(e.target.className.search(/idx_dir/) > -1){
+ frm.elements['ns'].value = acl.hsc(acl.parseatt(e.target.search)['ns']);
+ frm.elements['id'].value = '';
+ }
+
+ acl.loadinfo();
+ }
+
+ e.stopPropagation();
+ e.preventDefault();
+ return false;
+ }
+
+};
+
+addInitEvent(acl.init);
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/style.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/style.css
new file mode 100644
index 000000000..0c5a9819b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/style.css
@@ -0,0 +1,96 @@
+
+div#acl_manager div#acl__tree {
+ font-size: 90%;
+ width: 25%;
+ height: 300px;
+ float: left;
+ overflow: auto;
+ border: 1px solid __border__;
+ text-align: left;
+}
+
+div#acl_manager div#acl__tree a.cur {
+ background-color: __highlight__;
+ font-weight: bold;
+}
+
+div#acl_manager div#acl__tree ul {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+
+div#acl_manager div#acl__tree li {
+ padding-left: 1em;
+}
+
+div#acl_manager div#acl__tree ul img {
+ margin-right: 0.25em;
+ cursor: pointer;
+}
+
+div#acl_manager div#acl__detail {
+ width: 73%;
+ height: 300px;
+ float: right;
+ overflow: auto;
+}
+
+div#acl_manager div#acl__detail fieldset {
+ width: 90%;
+}
+
+div#acl_manager div#acl__detail div#acl__user {
+ border: 1px solid __border__;
+ padding: 0.5em;
+ margin-bottom: 0.6em;
+}
+
+div#acl_manager table.inline {
+ width: 100%;
+ margin: 0;
+}
+
+div#acl_manager .aclgroup {
+ background: transparent url(pix/group.png) 0px 1px no-repeat;
+ padding: 1px 0px 1px 18px;
+}
+
+div#acl_manager .acluser {
+ background: transparent url(pix/user.png) 0px 1px no-repeat;
+ padding: 1px 0px 1px 18px;
+}
+
+div#acl_manager .aclpage {
+ background: transparent url(pix/page.png) 0px 1px no-repeat;
+ padding: 1px 0px 1px 18px;
+}
+
+div#acl_manager .aclns {
+ background: transparent url(pix/ns.png) 0px 1px no-repeat;
+ padding: 1px 0px 1px 18px;
+}
+
+div#acl_manager label.disabled {
+ color: __text_neu__!important;
+}
+
+#acl_manager label {
+ text-align: left;
+ font-weight: normal;
+ display: inline;
+}
+
+#acl_manager table {
+ margin-left: 10%;
+ width: 80%;
+}
+
+#acl_manager table tr {
+ background-color: inherit;
+}
+
+#acl_manager table tr:hover {
+ background-color: __background_alt__;
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/action.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/action.php
new file mode 100644
index 000000000..a26bc654a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/action.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Action Plugin Prototype
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_INC.'inc/plugin.php');
+
+/**
+ * All DokuWiki plugins to interfere with the event system
+ * need to inherit from this class
+ */
+class DokuWiki_Action_Plugin extends DokuWiki_Plugin {
+
+ /**
+ * Registers a callback function for a given event
+ */
+ function register($controller) {
+ trigger_error('register() not implemented in '.get_class($this), E_USER_WARNING);
+ }
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/admin.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/admin.php
new file mode 100644
index 000000000..2eeda3f7b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/admin.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Admin Plugin Prototype
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_INC.'inc/plugin.php');
+
+/**
+ * All DokuWiki plugins to extend the admin function
+ * need to inherit from this class
+ */
+class DokuWiki_Admin_Plugin extends DokuWiki_Plugin {
+
+ function getMenuText($language) {
+ $menutext = $this->getLang('menu');
+ if (!$menutext) {
+ $info = $this->getInfo();
+ $menutext = $info['name'].' ...';
+ }
+ return $menutext;
+ }
+
+ function getMenuSort() {
+ return 1000;
+ }
+
+ function handle() {
+ trigger_error('handle() not implemented in '.get_class($this), E_USER_WARNING);
+ }
+
+ function html() {
+ trigger_error('html() not implemented in '.get_class($this), E_USER_WARNING);
+ }
+
+ function forAdminOnly() {
+ return true;
+ }
+
+ function getTOC(){
+ return array();
+ }
+}
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/print.css
new file mode 100644
index 000000000..956b8a38b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/print.css
@@ -0,0 +1,274 @@
+@CHARSET "UTF-8";
+
+/* plugin:box */
+div.box {
+ width: 50%;
+ margin: 1em auto;
+ border: 1px solid;
+ padding: 4px;
+ overflow: hidden;
+}
+
+/* rounded corners styles from Stu Nicholls snazzy borders, http://www.cssplay.co.uk/boxes/snazzy.html */
+.xtop, .xbottom {background:transparent; font-size:0; line-height: 1px;}
+.xb1, .xb2, .xb3, .xb4 {display:block; overflow:hidden; border-style: solid;}
+.xb2, .xb3 {height:1px;}
+.xb2, .xb3, .xb4 {border-width:0 1px;}
+.xb1 {height: 0; margin:0 5px; border-width:1px 0 0 0;}
+.xb2 {margin:0 3px; border-width:0 2px;}
+.xb3 {margin:0 2px;}
+.xb4 {height:2px; margin:0 1px;}
+
+div.box .xtop, div.box .xbottom {display: none;}
+div.box.round > .xtop, div.box.round > .xbottom {display: block;}
+
+div.box.round { border: none; padding: 0;}
+div.box.round > .xbox {display:block; border-width:0 1px; border-style: solid; padding: 0 4px; }
+
+div.box p.box_title, div.box p.box_caption {
+ font-size: 90%;
+ margin: 0;
+ padding: 2px 6px;
+ line-height: 1.2;
+}
+
+div.box p.box_title { margin-bottom: 4px;}
+div.box p.box_caption { margin-top: 4px;}
+
+div.box .box_content {
+ margin: 0;
+ padding: 0 6px;
+ border-width: 1px;
+ border-style: dashed;
+ line-height: 1.2;
+}
+
+/* floating alignment */
+
+div.box.left {
+ float: left;
+ margin-right: 1em;
+}
+
+div.box.right {
+ float: right;
+ margin-left: 1em;
+}
+
+/* colours */
+/* default */
+div.box, div.box .box_content, div.box .xbox, div.box .xb1, div.box .xb2, div.box .xb3, div.box .xb4 {
+ border-color: __dark__;
+}
+
+div.box, div.box .xbox, div.box .xb1, div.box .xb2, div.box .xb3, div.box .xb4 {
+ background: __light__;
+}
+
+div.box p.box_title, div.box p.box_caption { background: __medium__;}
+div.box .box_content { background: __lighter__;}
+
+/* blue */
+div.box.blue, div.box.blue > * > .box_content, div.box.blue > .xbox,
+div.box.blue > * > .xb1, div.box.blue > * > .xb2, div.box.blue > * > .xb3, div.box.blue > * > .xb4 {
+ border-color: #bbbbdd;
+}
+
+div.box.blue, div.box.blue > .xbox,
+div.box.blue > * > .xb1, div.box.blue > * > .xb2, div.box.blue > * > .xb3, div.box.blue > * > .xb4 {
+ background: #e4ecf8;
+}
+
+div.box.blue > * > p.box_title, div.box.blue > * > p.box_caption {background: #cad0ee;}
+div.box.blue > * > .box_content {background: #f4f8fd;}
+
+/* red */
+div.box.red, div.box.red > * > .box_content, div.box.red > .xbox,
+div.box.red > * > .xb1, div.box.red > * > .xb2, div.box.red > * > .xb3, div.box.red > * > .xb4 {
+ border-color: #ddbbbb;
+}
+
+div.box.red, div.box.red > .xbox,
+div.box.red > * > .xb1, div.box.red > * > .xb2, div.box.red > * > .xb3, div.box.red > * > .xb4 {
+ background: #f8ece4;
+}
+
+div.box.red > * > p.box_title, div.box.red > * > p.box_caption {background: #eed0ca;}
+div.box.red > * > .box_content {background: #fdf4ec;}
+
+/* green */
+div.box.green, div.box.green > * > .box_content, div.box.green > .xbox,
+div.box.green > * > .xb1, div.box.green > * > .xb2, div.box.green > * > .xb3, div.box.green > * > .xb4 {
+ border-color: #bbddbb;
+}
+
+div.box.green, div.box.green > .xbox,
+div.box.green > * > .xb1, div.box.green > * > .xb2, div.box.green > * > .xb3, div.box.green > * > .xb4 {
+ background: #e4f8f2;
+}
+
+div.box.green > * > p.box_title, div.box.green > * > p.box_caption {background: #c4e4d4;}
+div.box.green > * > .box_content {background: #ecfaf6;}
+
+/* orange */
+div.box.orange, div.box.orange > * > .box_content, div.box.orange > .xbox,
+div.box.orange > * > .xb1, div.box.orange > * > .xb2, div.box.orange > * > .xb3, div.box.orange > * > .xb4 {
+ border-color: #da3;
+}
+
+div.box.orange, div.box.orange > .xbox,
+div.box.orange > * > .xb1, div.box.orange > * > .xb2, div.box.orange > * > .xb3, div.box.orange > * > .xb4 {
+ background: #f4e8ca;
+}
+
+div.box.orange > * > p.box_title, div.box.orange > * > p.box_caption {background: #f0d499;}
+div.box.orange > * > .box_content {background: #f8f0da;}
+
+/* must come last to override coloured background when using rounded corners */
+
+div.box.round {
+ background: transparent !important;
+}
+
+/* IE fixes for unsupported child selector \*/
+
+* html div.box div.box, * html div.box div.box .box_content, * html div.box div.box .xbox,
+* html div.box div.box .xb1, * html div.box div.box .xb2,
+* html div.box div.box .xb3, * html div.box div.box .xb4 {
+ border-color: __dark__;
+}
+
+* html div.box div.box, * html div.box div.box .xbox,
+* html div.box div.box .xb1, * html div.box div.box .xb2,
+* html div.box div.box .xb3, * html div.box div.box .xb4 {
+ background: __light__;
+}
+
+* html div.box div.box p.box_title, * html div.box div.box p.box_caption { background: __medium__;}
+* html div.box div.box .box_content { background: __lighter__;}
+
+* html div.box.round .xtop, * html div.box.round .xbottom {display: block;}
+* html div.box.round .xbox {display:block; border-width:0 1px; border-style: solid; padding: 0 4px; }
+
+/* blue */
+* html div.box.blue .box_content, * html div.box.blue .xbox,
+* html div.box.blue .xb1, * html div.box.blue .xb2, * html div.box.blue .xb3, * html div.box.blue .xb4 {
+ border-color: #bbbbdd;
+}
+
+* html div.box.blue .xbox,
+* html div.box.blue .xb1, * html div.box.blue .xb2, * html div.box.blue .xb3, * html div.box.blue .xb4 {
+ background: #e4ecf8;
+}
+
+* html div.box.blue p.box_title, * html div.box.blue p.box_caption {background: #cad0ee;}
+* html div.box.blue .box_content {background: #f4f8fd;}
+
+/* nested blue */
+* html div.box div.box.blue .box_content, * html div.box div.box.blue .xbox,
+* html div.box div.box.blue .xb1, * html div.box div.box.blue .xb2,
+* html div.box div.box.blue .xb3, * html div.box div.box.blue .xb4 {
+ border-color: #bbbbdd;
+}
+
+* html div.box div.box.blue .xbox,
+* html div.box div.box.blue .xb1, * html div.box div.box.blue .xb2,
+* html div.box div.box.blue .xb3, * html div.box div.box.blue .xb4 {
+ background: #e4ecf8;
+}
+
+* html div.box div.box.blue p.box_title,
+* html div.box div.box.blue p.box_caption {background: #cad0ee;}
+* html div.box div.box.blue .box_content {background: #f4f8fd;}
+
+/* red */
+* html div.box.red .box_content, * html div.box.red .xbox,
+* html div.box.red .xb1, * html div.box.red .xb2, * html div.box.red .xb3, * html div.box.red .xb4 {
+ border-color: #ddbbbb;
+}
+
+* html div.box.red .xbox,
+* html div.box.red .xb1, * html div.box.red .xb2, * html div.box.red .xb3, * html div.box.red .xb4 {
+ background: #f8ece4;
+}
+
+* html div.box.red p.box_title, * html div.box.red p.box_caption {background: #eed0ca;}
+* html div.box.red .box_content {background: #fdf4ec;}
+
+/* nested red */
+* html div.box div.box.red .box_content, * html div.box div.box.red .xbox,
+* html div.box div.box.red .xb1, * html div.box div.box.red .xb2,
+* html div.box div.box.red .xb3, * html div.box div.box.red .xb4 {
+ border-color: #ddbbbb;
+}
+
+* html div.box div.box.red .xbox,
+* html div.box div.box.red .xb1, * html div.box div.box.red .xb2,
+* html div.box div.box.red .xb3, * html div.box div.box.red .xb4 {
+ background: #f8ece4;
+}
+
+* html div.box div.box.red p.box_title, * html div.box div.box.red p.box_caption {background: #eed0ca;}
+* html div.box div.box.red .box_content {background: #fdf4ec;}
+
+/* green */
+* html div.box.green .box_content, * html div.box.green .xbox,
+* html div.box.green .xb1, * html div.box.green .xb2, * html div.box.green .xb3, * html div.box.green .xb4 {
+ border-color: #bbddbb;
+}
+
+* html div.box.green .xbox,
+* html div.box.green .xb1, * html div.box.green .xb2, * html div.box.green .xb3, * html div.box.green .xb4 {
+ background: #e4f8f2;
+}
+
+* html div.box.green p.box_title, * html div.box.green p.box_caption {background: #c4e4d4;}
+* html div.box.green .box_content {background: #ecfaf6;}
+
+/* nested green */
+* html div.box div.box.green .box_content, * html div.box div.box.green .xbox,
+* html div.box div.box.green .xb1, * html div.box div.box.green .xb2,
+* html div.box div.box.green .xb3, * html div.box div.box.green .xb4 {
+ border-color: #bbddbb;
+}
+
+* html div.box div.box.green .xbox,
+* html div.box div.box.green .xb1, * html div.box div.box.green .xb2,
+* html div.box div.box.green .xb3, * html div.box div.box.green .xb4 {
+ background: #e4f8f2;
+}
+
+* html div.box div.box.green p.box_title, * html div.box div.box.green p.box_caption {background: #c4e4d4;}
+* html div.box div.box.green .box_content {background: #ecfaf6;}
+
+/* orange */
+* html div.box.orange .box_content, * html div.box.orange .xbox,
+* html div.box.orange .xb1, * html div.box.orange .xb2, * html div.box.orange .xb3, * html div.box.orange .xb4 {
+ border-color: #da3;
+}
+
+* html div.box.orange .xbox,
+* html div.box.orange .xb1, * html div.box.orange .xb2, * html div.box.orange .xb3, * html div.box.orange .xb4 {
+ background: #f4e8ca;
+}
+
+* html div.box.orange p.box_title, * html div.box.orange p.box_caption {background: #f0d499;}
+* html div.box.orange .box_content {background: #f8f0da;}
+
+/* nestedorange */
+* html div.box div.box.orange .box_content, * html div.box div.box.orange .xbox,
+* html div.box div.box.orange .xb1, * html div.box div.box.orange .xb2,
+* html div.box div.box.orange .xb3, * html div.box div.box.orange .xb4 {
+ border-color: #da3;
+}
+
+* html div.box div.box.orange .xbox,
+* html div.box div.box.orange .xb1, * html div.box div.box.orange .xb2,
+* html div.box div.box.orange .xb3, * html div.box div.box.orange .xb4 {
+ background: #f4e8ca;
+}
+
+* html div.box div.box.orange p.box_title, * html div.box div.box.orange p.box_caption {background: #f0d499;}
+* html div.box div.box.orange .box_content {background: #f8f0da;}
+
+/* end plugin:box */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/style.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/style.css
new file mode 100644
index 000000000..f20d765bc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/style.css
@@ -0,0 +1,272 @@
+/* plugin:box */
+div.box {
+ width: 50%;
+ margin: 1em auto;
+ border: 1px solid;
+ padding: 4px;
+ overflow: hidden;
+}
+
+/* rounded corners styles from Stu Nicholls snazzy borders, http://www.cssplay.co.uk/boxes/snazzy.html */
+.xtop, .xbottom {background:transparent; font-size:0; line-height: 1px;}
+.xb1, .xb2, .xb3, .xb4 {display:block; overflow:hidden; border-style: solid;}
+.xb2, .xb3 {height:1px;}
+.xb2, .xb3, .xb4 {border-width:0 1px;}
+.xb1 {height: 0; margin:0 5px; border-width:1px 0 0 0;}
+.xb2 {margin:0 3px; border-width:0 2px;}
+.xb3 {margin:0 2px;}
+.xb4 {height:2px; margin:0 1px;}
+
+div.box .xtop, div.box .xbottom {display: none;}
+div.box.round > .xtop, div.box.round > .xbottom {display: block;}
+
+div.box.round { border: none; padding: 0;}
+div.box.round > .xbox {display:block; border-width:0 1px; border-style: solid; padding: 0 4px; }
+
+div.box p.box_title, div.box p.box_caption {
+ font-size: 90%;
+ margin: 0;
+ padding: 2px 6px;
+ line-height: 1.2;
+}
+
+div.box p.box_title { margin-bottom: 4px;}
+div.box p.box_caption { margin-top: 4px;}
+
+div.box .box_content {
+ margin: 0;
+ padding: 0 6px;
+ border-width: 1px;
+ border-style: dashed;
+ line-height: 1.2;
+}
+
+/* floating alignment */
+
+div.box.left {
+ float: left;
+ margin-right: 1em;
+}
+
+div.box.right {
+ float: right;
+ margin-left: 1em;
+}
+
+/* colours */
+/* default */
+div.box, div.box .box_content, div.box .xbox, div.box .xb1, div.box .xb2, div.box .xb3, div.box .xb4 {
+ border-color: __dark__;
+}
+
+div.box, div.box .xbox, div.box .xb1, div.box .xb2, div.box .xb3, div.box .xb4 {
+ background: __light__;
+}
+
+div.box p.box_title, div.box p.box_caption { background: __medium__;}
+div.box .box_content { background: __lighter__;}
+
+/* blue */
+div.box.blue, div.box.blue > * > .box_content, div.box.blue > .xbox,
+div.box.blue > * > .xb1, div.box.blue > * > .xb2, div.box.blue > * > .xb3, div.box.blue > * > .xb4 {
+ border-color: #bbbbdd;
+}
+
+div.box.blue, div.box.blue > .xbox,
+div.box.blue > * > .xb1, div.box.blue > * > .xb2, div.box.blue > * > .xb3, div.box.blue > * > .xb4 {
+ background: #e4ecf8;
+}
+
+div.box.blue > * > p.box_title, div.box.blue > * > p.box_caption {background: #cad0ee;}
+div.box.blue > * > .box_content {background: #f4f8fd;}
+
+/* red */
+div.box.red, div.box.red > * > .box_content, div.box.red > .xbox,
+div.box.red > * > .xb1, div.box.red > * > .xb2, div.box.red > * > .xb3, div.box.red > * > .xb4 {
+ border-color: #ddbbbb;
+}
+
+div.box.red, div.box.red > .xbox,
+div.box.red > * > .xb1, div.box.red > * > .xb2, div.box.red > * > .xb3, div.box.red > * > .xb4 {
+ background: #f8ece4;
+}
+
+div.box.red > * > p.box_title, div.box.red > * > p.box_caption {background: #eed0ca;}
+div.box.red > * > .box_content {background: #fdf4ec;}
+
+/* green */
+div.box.green, div.box.green > * > .box_content, div.box.green > .xbox,
+div.box.green > * > .xb1, div.box.green > * > .xb2, div.box.green > * > .xb3, div.box.green > * > .xb4 {
+ border-color: #bbddbb;
+}
+
+div.box.green, div.box.green > .xbox,
+div.box.green > * > .xb1, div.box.green > * > .xb2, div.box.green > * > .xb3, div.box.green > * > .xb4 {
+ background: #e4f8f2;
+}
+
+div.box.green > * > p.box_title, div.box.green > * > p.box_caption {background: #c4e4d4;}
+div.box.green > * > .box_content {background: #ecfaf6;}
+
+/* orange */
+div.box.orange, div.box.orange > * > .box_content, div.box.orange > .xbox,
+div.box.orange > * > .xb1, div.box.orange > * > .xb2, div.box.orange > * > .xb3, div.box.orange > * > .xb4 {
+ border-color: #da3;
+}
+
+div.box.orange, div.box.orange > .xbox,
+div.box.orange > * > .xb1, div.box.orange > * > .xb2, div.box.orange > * > .xb3, div.box.orange > * > .xb4 {
+ background: #f4e8ca;
+}
+
+div.box.orange > * > p.box_title, div.box.orange > * > p.box_caption {background: #f0d499;}
+div.box.orange > * > .box_content {background: #f8f0da;}
+
+/* must come last to override coloured background when using rounded corners */
+
+div.box.round {
+ background: transparent !important;
+}
+
+/* IE fixes for unsupported child selector \*/
+
+* html div.box div.box, * html div.box div.box .box_content, * html div.box div.box .xbox,
+* html div.box div.box .xb1, * html div.box div.box .xb2,
+* html div.box div.box .xb3, * html div.box div.box .xb4 {
+ border-color: __dark__;
+}
+
+* html div.box div.box, * html div.box div.box .xbox,
+* html div.box div.box .xb1, * html div.box div.box .xb2,
+* html div.box div.box .xb3, * html div.box div.box .xb4 {
+ background: __light__;
+}
+
+* html div.box div.box p.box_title, * html div.box div.box p.box_caption { background: __medium__;}
+* html div.box div.box .box_content { background: __lighter__;}
+
+* html div.box.round .xtop, * html div.box.round .xbottom {display: block;}
+* html div.box.round .xbox {display:block; border-width:0 1px; border-style: solid; padding: 0 4px; }
+
+/* blue */
+* html div.box.blue .box_content, * html div.box.blue .xbox,
+* html div.box.blue .xb1, * html div.box.blue .xb2, * html div.box.blue .xb3, * html div.box.blue .xb4 {
+ border-color: #bbbbdd;
+}
+
+* html div.box.blue .xbox,
+* html div.box.blue .xb1, * html div.box.blue .xb2, * html div.box.blue .xb3, * html div.box.blue .xb4 {
+ background: #e4ecf8;
+}
+
+* html div.box.blue p.box_title, * html div.box.blue p.box_caption {background: #cad0ee;}
+* html div.box.blue .box_content {background: #f4f8fd;}
+
+/* nested blue */
+* html div.box div.box.blue .box_content, * html div.box div.box.blue .xbox,
+* html div.box div.box.blue .xb1, * html div.box div.box.blue .xb2,
+* html div.box div.box.blue .xb3, * html div.box div.box.blue .xb4 {
+ border-color: #bbbbdd;
+}
+
+* html div.box div.box.blue .xbox,
+* html div.box div.box.blue .xb1, * html div.box div.box.blue .xb2,
+* html div.box div.box.blue .xb3, * html div.box div.box.blue .xb4 {
+ background: #e4ecf8;
+}
+
+* html div.box div.box.blue p.box_title,
+* html div.box div.box.blue p.box_caption {background: #cad0ee;}
+* html div.box div.box.blue .box_content {background: #f4f8fd;}
+
+/* red */
+* html div.box.red .box_content, * html div.box.red .xbox,
+* html div.box.red .xb1, * html div.box.red .xb2, * html div.box.red .xb3, * html div.box.red .xb4 {
+ border-color: #ddbbbb;
+}
+
+* html div.box.red .xbox,
+* html div.box.red .xb1, * html div.box.red .xb2, * html div.box.red .xb3, * html div.box.red .xb4 {
+ background: #f8ece4;
+}
+
+* html div.box.red p.box_title, * html div.box.red p.box_caption {background: #eed0ca;}
+* html div.box.red .box_content {background: #fdf4ec;}
+
+/* nested red */
+* html div.box div.box.red .box_content, * html div.box div.box.red .xbox,
+* html div.box div.box.red .xb1, * html div.box div.box.red .xb2,
+* html div.box div.box.red .xb3, * html div.box div.box.red .xb4 {
+ border-color: #ddbbbb;
+}
+
+* html div.box div.box.red .xbox,
+* html div.box div.box.red .xb1, * html div.box div.box.red .xb2,
+* html div.box div.box.red .xb3, * html div.box div.box.red .xb4 {
+ background: #f8ece4;
+}
+
+* html div.box div.box.red p.box_title, * html div.box div.box.red p.box_caption {background: #eed0ca;}
+* html div.box div.box.red .box_content {background: #fdf4ec;}
+
+/* green */
+* html div.box.green .box_content, * html div.box.green .xbox,
+* html div.box.green .xb1, * html div.box.green .xb2, * html div.box.green .xb3, * html div.box.green .xb4 {
+ border-color: #bbddbb;
+}
+
+* html div.box.green .xbox,
+* html div.box.green .xb1, * html div.box.green .xb2, * html div.box.green .xb3, * html div.box.green .xb4 {
+ background: #e4f8f2;
+}
+
+* html div.box.green p.box_title, * html div.box.green p.box_caption {background: #c4e4d4;}
+* html div.box.green .box_content {background: #ecfaf6;}
+
+/* nested green */
+* html div.box div.box.green .box_content, * html div.box div.box.green .xbox,
+* html div.box div.box.green .xb1, * html div.box div.box.green .xb2,
+* html div.box div.box.green .xb3, * html div.box div.box.green .xb4 {
+ border-color: #bbddbb;
+}
+
+* html div.box div.box.green .xbox,
+* html div.box div.box.green .xb1, * html div.box div.box.green .xb2,
+* html div.box div.box.green .xb3, * html div.box div.box.green .xb4 {
+ background: #e4f8f2;
+}
+
+* html div.box div.box.green p.box_title, * html div.box div.box.green p.box_caption {background: #c4e4d4;}
+* html div.box div.box.green .box_content {background: #ecfaf6;}
+
+/* orange */
+* html div.box.orange .box_content, * html div.box.orange .xbox,
+* html div.box.orange .xb1, * html div.box.orange .xb2, * html div.box.orange .xb3, * html div.box.orange .xb4 {
+ border-color: #da3;
+}
+
+* html div.box.orange .xbox,
+* html div.box.orange .xb1, * html div.box.orange .xb2, * html div.box.orange .xb3, * html div.box.orange .xb4 {
+ background: #f4e8ca;
+}
+
+* html div.box.orange p.box_title, * html div.box.orange p.box_caption {background: #f0d499;}
+* html div.box.orange .box_content {background: #f8f0da;}
+
+/* nestedorange */
+* html div.box div.box.orange .box_content, * html div.box div.box.orange .xbox,
+* html div.box div.box.orange .xb1, * html div.box div.box.orange .xb2,
+* html div.box div.box.orange .xb3, * html div.box div.box.orange .xb4 {
+ border-color: #da3;
+}
+
+* html div.box div.box.orange .xbox,
+* html div.box div.box.orange .xb1, * html div.box div.box.orange .xb2,
+* html div.box div.box.orange .xb3, * html div.box div.box.orange .xb4 {
+ background: #f4e8ca;
+}
+
+* html div.box div.box.orange p.box_title, * html div.box div.box.orange p.box_caption {background: #f0d499;}
+* html div.box div.box.orange .box_content {background: #f8f0da;}
+
+/* end plugin:box */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/syntax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/syntax.php
new file mode 100644
index 000000000..35f96f85a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/syntax.php
@@ -0,0 +1,287 @@
+<?php
+/**
+ * Box Plugin: Draw highlighting boxes around wiki markup
+ *
+ * Syntax: <box width% classes|title>
+ * width% width of the box, must use % unit
+ * classes one or more classes used to style the box, several predefined styles included in style.css
+ * title (optional) all text after '|' will be rendered above the main code text with a
+ * different style.
+ *
+ * Acknowledgements:
+ * Rounded corners based on snazzy borders by Stu Nicholls (http://www.cssplay.co.uk/boxes/snazzy)
+ * which is in turn based on nifty corners by Alessandro Fulciniti (http://pro.html.it/esempio/nifty/)
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+
+if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'syntax.php');
+
+/**
+ * All DokuWiki plugins to extend the parser/rendering mechanism
+ * need to inherit from this class
+ */
+class syntax_plugin_box extends DokuWiki_Syntax_Plugin {
+
+ var $title_mode = false;
+
+ // the following are used in rendering and are set by _xhtml_boxopen()
+ var $_xb_colours = '';
+ var $_content_colours = '';
+ var $_title_colours = '';
+
+ /**
+ * return some info
+ */
+ function getInfo(){
+ return array(
+ 'author' => 'Christopher Smith',
+ 'email' => 'chris@jalakai.co.uk',
+ 'date' => '2008-11-11',
+ 'name' => 'Box Plugin',
+ 'desc' => 'Boxes with titles, colour and rounded corners.
+ Syntax: <box width class colours|title> ... </box|caption>
+ width, class, colours title & caption are optional.
+ The title can include some wiki markup, the box
+ contents can include almost any wiki markup.',
+ 'url' => 'http://www.dokuwiki.org/plugin:boxes',
+ );
+ }
+
+ function getType(){ return 'protected';}
+ function getAllowedTypes() { return array('container','substition','protected','disabled','formatting','paragraphs'); }
+ function getPType(){ return 'block';}
+
+ // must return a number lower than returned by native 'code' mode (200)
+ function getSort(){ return 195; }
+
+ // override default accepts() method to allow nesting
+ // - ie, to get the plugin accepts its own entry syntax
+ function accepts($mode) {
+ if ($mode == substr(get_class($this), 7)) return true;
+
+ return parent::accepts($mode);
+ }
+
+ /**
+ * Connect pattern to lexer
+ */
+ function connectTo($mode) {
+ $this->Lexer->addEntryPattern('<box>(?=.*?</box.*?>)',$mode,'plugin_box');
+ $this->Lexer->addEntryPattern('<box\s[^\r\n\|]*?>(?=.*?</box.*?>)',$mode,'plugin_box');
+ $this->Lexer->addEntryPattern('<box\|(?=[^\r\n]*?\>.*?</box.*?\>)',$mode,'plugin_box');
+ $this->Lexer->addEntryPattern('<box\s[^\r\n\|]*?\|(?=[^\r\n]*?>.*?</box.*?>)',$mode,'plugin_box');
+ }
+
+ function postConnect() {
+ $this->Lexer->addPattern('>', 'plugin_box');
+ $this->Lexer->addExitPattern('</box.*?>', 'plugin_box');
+ }
+
+ /**
+ * Handle the match
+ */
+ function handle($match, $state, $pos, &$handler){
+
+ switch ($state) {
+ case DOKU_LEXER_ENTER:
+ $data = $this->_boxstyle(trim(substr($match, 4, -1)));
+ if (substr($match, -1) == '|') {
+ $this->title_mode = true;
+ return array('title_open',$data);
+ } else {
+ return array('box_open',$data);
+ }
+
+ case DOKU_LEXER_MATCHED:
+ if ($this->title_mode) {
+ $this->title_mode = false;
+ return array('box_open','');
+ } else {
+ return array('data', $match);
+ }
+
+ case DOKU_LEXER_UNMATCHED:
+ $handler->_addCall('cdata',array($match), $pos);
+ return false;
+
+ case DOKU_LEXER_EXIT:
+ $data = trim(substr($match, 5, -1));
+ $title = ($data && $data{0} == "|") ? substr($data,1) : '';
+
+ return array('box_close', $title);
+
+ }
+ return false;
+ }
+
+ /**
+ * Create output
+ */
+ function render($mode, &$renderer, $indata) {
+
+ if (empty($indata)) return false;
+ list($instr, $data) = $indata;
+
+ if($mode == 'xhtml'){
+ switch ($instr) {
+ case 'title_open' :
+ $this->title_mode = true;
+ $renderer->doc .= $this->_xhtml_boxopen($data)."<p class='box_title'{$this->_title_colours}>";
+ break;
+
+ case 'box_open' :
+ if ($this->title_mode) {
+ $this->title_mode = false;
+ $renderer->doc .= "</p>\n<div class='box_content'{$this->_content_colours}>";
+ } else {
+ $renderer->doc .= $this->_xhtml_boxopen($data)."<div class='box_content'{$this->_content_colours}>";
+ }
+ break;
+
+ case 'data' :
+ $renderer->doc .= $renderer->_xmlEntities($data);
+ break;
+
+ case 'box_close' :
+ $renderer->doc .= "</div>\n";
+
+ if ($data) {
+ $renderer->doc .= "<p class='box_caption'{$this->_title_colours}>".$renderer->_xmlEntities($data)."</p>\n";
+ }
+ $renderer->doc .= $this->_xhtml_boxclose();
+ break;
+ }
+
+ return true;
+ }
+ return false;
+ }
+
+ function _boxstyle($str) {
+ if (!strlen($str)) return array();
+
+ $styles = array();
+
+ $tokens = preg_split('/\s+/', $str, 9); // limit is defensive
+ foreach ($tokens as $token) {
+ if (preg_match('/^\d*\.?\d+(%|px|em|ex|pt|cm|mm|pi|in)$/', $token)) {
+ $styles['width'] = $token;
+ continue;
+ }
+
+ if (preg_match('/^(
+ (\#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))| #colorvalue
+ (rgb\(([0-9]{1,3}%?,){2}[0-9]{1,3}%?\)) #rgb triplet
+ )$/x', $token)) {
+ $styles['colour'][] = $token;
+ continue;
+ }
+
+ // restrict token (class names) characters to prevent any malicious data
+ if (preg_match('/[^A-Za-z0-9_-]/',$token)) continue;
+ $styles['class'] = (isset($styles['class']) ? $styles['class'].' ' : '').$token;
+ }
+ if (!empty($styles['colour'])) {
+ $styles['colour'] = $this->_box_colours($styles['colour']);
+ }
+
+ return $styles;
+ }
+
+ function _box_colours($colours) {
+ $triplets = array();
+
+ // only need the first four colours
+ if (count($colours) > 4) $colours = array_slice($colours,0,4);
+ foreach ($colours as $colour) {
+ $triplet[] = $this->_colourToTriplet($colour);
+ }
+
+ // there must be one colour to get here - the primary background
+ // calculate title background colour if not present
+ if (empty($triplet[1])) {
+ $triplet[1] = $triplet[0];
+ }
+
+ // calculate outer background colour if not present
+ if (empty($triplet[2])) {
+ $triplet[2] = $triplet[0];
+ }
+
+ // calculate border colour if not present
+ if (empty($triplet[3])) {
+ $triplet[3] = $triplet[0];
+ }
+
+ // convert triplets back to style sheet colours
+ $style_colours['content_background'] = 'rgb('.join(',',$triplet[0]).')';
+ $style_colours['title_background'] = 'rgb('.join(',',$triplet[1]).')';
+ $style_colours['outer_background'] = 'rgb('.join(',',$triplet[2]).')';
+ $style_colours['borders'] = 'rgb('.join(',',$triplet[3]).')';
+
+ return $style_colours;
+ }
+
+ function _colourToTriplet($colour) {
+ if ($colour{0} == '#') {
+ if (strlen($colour) == 4) {
+ // format #FFF
+ return array(hexdec($colour{1}.$colour{1}),hexdec($colour{2}.$colour{2}),hexdec($colour{3}.$colour{3}));
+ } else {
+ // format #FFFFFF
+ return array(hexdec(substr($colour,1,2)),hexdec(substr($colour,3,2)), hexdec(substr($colour,5,2)));
+ }
+ } else {
+ // format rgb(x,y,z)
+ return explode(',',substr($colour,4,-1));
+ }
+ }
+
+ function _xhtml_boxopen($styles) {
+ $class = 'class="box' . (isset($styles['class']) ? ' '.$styles['class'] : '') . '"';
+ $style = isset($styles['width']) ? "width: {$styles['width']};" : '';
+
+ if (isset($styles['colour'])) {
+ $colours = 'background-color: '.$styles['colour']['outer_background'].'; ';
+ $colours .= 'border-color: '.$styles['colour']['borders'].';';
+
+ $this->_content_colours = 'style="background-color: '.$styles['colour']['content_background'].'; border-color: '.$styles['colour']['borders'].'"';
+ $this->_title_colours = 'style="background-color: '.$styles['colour']['title_background'].';"';
+
+ } else {
+ $colours = '';
+
+ $this->_content_colours = '';
+ $this->_title_colours = '';
+ }
+
+ if ($style || $colours) $style = ' style="'.$style.' '.$colours.'"';
+ if ($colours) $colours = ' style="'.$colours.'"';
+
+ $this->_xb_colours = $colours;
+
+ $html = "<div $class$style>\n";
+ $html .=" <b class='xtop'><b class='xb1'$colours></b><b class='xb2'$colours></b><b class='xb3'$colours></b><b class='xb4'$colours></b></b>\n";
+ $html .=" <div class='xbox'$colours>\n";
+
+ return $html;
+ }
+
+ function _xhtml_boxclose() {
+
+ $colours = $this->_xb_colours;
+
+ $html = " </div>\n";
+ $html .= " <b class='xbottom'><b class='xb4'$colours></b><b class='xb3'$colours></b><b class='xb2'$colours></b><b class='xb1'$colours></b></b>\n";
+ $html .= "</div>\n";
+
+ return $html;
+ }
+
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 : \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/index.html
new file mode 100644
index 000000000..d614603ac
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/index.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="refresh" content="0; URL=../../" />
+<meta name="robots" content="noindex" />
+<title>nothing here...</title>
+</head>
+<body>
+<!-- this is just here to prevent directory browsing -->
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/COPYING b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/COPYING
new file mode 100644
index 000000000..d60c31a97
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/CREDITS b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/CREDITS
new file mode 100644
index 000000000..cb03c247d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/CREDITS
@@ -0,0 +1,58 @@
+Thanks to:
+
+Geir Landro:
+ Dtree Javascript code.
+
+Roland Hellebart:
+ The Dtree idea.
+
+Chris Beetle:
+ The root namespace index.
+
+Gleb:
+ The nons e headpage option suggestion.
+
+Malyfred:
+ Resolved incorrect namespaces levels bug.
+
+Raymond Elferink:
+ Resolved incorrect ACLs bug.
+
+Ilya Lebedev:
+ Skip index option.
+
+Franck Baron:
+ Js id option.
+
+Jon B:
+ Skip file option.
+
+Neosky:
+ Javascript toolbar bug.
+
+Paul Grove:
+ Css dynamic properties and suggestion of js theme with differents image formats
+
+Anja Vag:
+ Great help in testing and finding bugs.
+
+Blaz:
+ Current page highliting suggestion.
+
+Adrien CLERC:
+ Start page bug.
+
+Ryan Jake and Fullindex plugin:
+ Sort by metada suggestion.
+
+Herman Huitema:
+ Context menu search function and great help in testing patches.
+
+Thomas Binder:
+ Fixed a bug with msort/nsort that did not manage empty arrays.
+
+Fabian Pfannes:
+ German language
+
+Urban:
+ Context menu patch and other suggestions
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/VERSION.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/VERSION.txt
new file mode 100644
index 000000000..db43bc514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/VERSION.txt
@@ -0,0 +1 @@
+2009-08-29
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/action.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/action.php
new file mode 100644
index 000000000..ee09a980d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/action.php
@@ -0,0 +1,169 @@
+<?php
+/**
+ * Indexmenu Action Plugin: Indexmenu Component.
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+
+if(!defined('DOKU_INC')) die();
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'action.php');
+
+class action_plugin_indexmenu extends DokuWiki_Action_Plugin {
+
+ /**
+ * return some info
+ */
+ function getInfo(){
+ return array(
+ 'author' => 'Samuele Tognini',
+ 'email' => 'samuele@netsons.org',
+ 'date' => rtrim(io_readFile(DOKU_PLUGIN.'indexmenu/VERSION.txt')),
+ 'name' => 'Indexmenu (action plugin component)',
+ 'desc' => 'Indexmenu action functions.',
+ 'url' => 'http://wiki.splitbrain.org/plugin:indexmenu',
+ );
+ }
+
+ /*
+ * plugin should use this method to register its handlers with the dokuwiki's event controller
+ */
+ function register(&$controller) {
+ if ($this->getConf('only_admins')) $controller->register_hook('IO_WIKIPAGE_WRITE', 'BEFORE', $this, '_checkperm');
+ if ($this->getConf('page_index') != '') $controller->register_hook('TPL_ACT_RENDER', 'BEFORE', $this, '_loadindex');
+ $controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, '_hookjs');
+ $controller->register_hook('PARSER_CACHE_USE', 'BEFORE', $this, '_purgecache');
+ if ($this->getConf('show_sort')) $controller->register_hook('TPL_CONTENT_DISPLAY', 'BEFORE', $this, '_showsort');
+ }
+
+ /**
+ * Check if user has permission to insert indexmenu
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _checkperm(&$event, $param) {
+ if ($this->_notadmin()) {
+ $event->data[0][1]= preg_replace("/{{indexmenu(|_n)>.+?}}/","",$event->data[0][1]);
+ }
+ }
+
+ /**
+ * Hook js script into page headers.
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _hookjs(&$event, $param) {
+ global $ID;
+ global $INFO;
+ $jsmenu=DOKU_BASE."lib/plugins/indexmenu/jsmenu/";
+
+ if ($INFO['userinfo']['grps']) {
+ $jsmenu .= ($this->_notadmin()) ? "usrmenu.js" : "admmenu.js";
+ } else {
+ $jsmenu .= "menu.js";
+ }
+
+ $event->data["script"][] = array ( "type" => "text/javascript",
+ "charset" => "utf-8",
+ "_data" => "",
+ "src" => $jsmenu
+ );
+
+ $event->data["script"][] = array ( "type" => "text/javascript",
+ "charset" => "utf-8",
+ "_data" => "",
+ "src" => DOKU_BASE."lib/plugins/indexmenu/indexmenu.js"
+ );
+
+ $event->data["script"][] = array ( "type" => "text/javascript",
+ "charset" => "utf-8",
+ "_data" => "var indexmenu_ID='".idfilter($ID)."'"
+ );
+ }
+
+ /**
+ * Check for pages changes and eventually purge cache.
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _purgecache(&$event, $param) {
+ global $ID;
+ global $conf;
+ $cache = &$event->data;
+
+ if (!isset($cache->page)) return;
+ //purge only xhtml cache
+ if ($cache->mode != "xhtml") return;
+ //Check if it is an indexmenu page
+ if (!p_get_metadata($ID,'indexmenu')) return;
+ $aclcache=$this->getConf('aclcache');
+ if ($conf['useacl']) {
+ $newkey=false;
+ if ($aclcache == 'user') {
+ //Cache per user
+ if ($_SERVER['REMOTE_USER']) $newkey=$_SERVER['REMOTE_USER'];
+ } else if ($aclcache == 'groups') {
+ //Cache per groups
+ global $INFO;
+ if ($INFO['userinfo']['grps']) $newkey=implode('#',$INFO['userinfo']['grps']);
+ }
+ if ($newkey) {
+ $cache->key .= "#".$newkey;
+ $cache->cache = getCacheName($cache->key, $cache->ext);
+ }
+ }
+ //Check if a page is more recent than purgefile.
+ if (@filemtime($cache->cache) < @filemtime($conf['cachedir'].'/purgefile')) {
+ $event->preventDefault();
+ $event->stopPropagation();
+ $event->result = false;
+ }
+ }
+
+ /**
+ * Render a defined page as index.
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _loadindex(&$event, $param) {
+ if ('index' != $event->data) return;
+ if (!file_exists(wikiFN($this->getConf('page_index')))) return;
+ global $lang;
+ print '<h1><a id="index" name="index">'.$lang['btn_index']."</a></h1>\n";
+ print p_wiki_xhtml($this->getConf('page_index'));
+ $event->preventDefault();
+ $event->stopPropagation();
+
+ }
+
+ /**
+ * Display the indexmenu sort number.
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _showsort(&$event, $param) {
+ global $ID,$ACT;
+ if ($ACT != 'show' || $this->_notadmin()) return;
+ if ($n=p_get_metadata($ID,'indexmenu_n')) {
+ ptln('<div class="info">');
+ ptln($this->getLang('showsort').$n);
+ ptln('</div>');
+ }
+ }
+
+ /**
+ * Check if user is administrator..
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _notadmin() {
+ global $conf;
+ global $INFO;
+
+ if ($conf['useacl'] && $INFO['perm'] < AUTH_ADMIN) {
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/admin.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/admin.php
new file mode 100644
index 000000000..99b6e12a2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/admin.php
@@ -0,0 +1,453 @@
+<?php
+/**
+ * Indexmenu Admin Plugin: Indexmenu Component.
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+
+if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'admin.php');
+require_once (DOKU_INC.'inc/HTTPClient.php');
+require_once(DOKU_PLUGIN."indexmenu/inc/pclzip.lib.php");
+if(!defined('INDEXMENU_IMG_ABSDIR')) define('INDEXMENU_IMG_ABSDIR',DOKU_PLUGIN."indexmenu/images");
+define('INDEXMENU_ICOS','base,folder,folderopen,folderh,folderhopen,page,plus,minus,nolines_plus,nolines_minus,minusbottom,plusbottom,join,joinbottom,line,empty');
+
+class admin_plugin_indexmenu extends DokuWiki_Admin_Plugin {
+ var $req = 'fetch';
+ var $repos = array (
+ "url" => array(DOKU_URL),
+ "status" => array(""),
+ );
+
+ var $selected=-1;
+
+ /**
+ * return some info
+ */
+ function getInfo(){
+ return array(
+ 'author' => 'Samuele Tognini',
+ 'email' => 'samuele@netsons.org',
+ 'date' => rtrim(io_readFile(DOKU_PLUGIN.'indexmenu/VERSION.txt')),
+ 'name' => 'Indexmenu (admin plugin component)',
+ 'desc' => 'Indexmenu admin functions.',
+ 'url' => 'http://wiki.splitbrain.org/plugin:indexmenu',
+ );
+ }
+
+ /**
+ * return sort order for position in admin menu
+ */
+ function getMenuSort() {
+ return 999;
+ }
+
+ /**
+ * handle user request
+ */
+ function handle() {
+ $url=$this->getConf('themes_url');
+ if (empty($url)) {
+ $this->repos['url'][]=$this->getLang('no_repos');
+ $this->repos['status'][]="disabled";
+ $this->repos['install'][]=-1;
+ } else {
+ $this->repos['url']= array_merge($this->repos['url'],explode(',',$url));
+ }
+
+ if (!isset($_REQUEST['req'])) return; // first time - nothing to do
+ $this->req=$_REQUEST['req'];
+
+ if (is_numeric($_REQUEST['repo'])) $this->selected=$_REQUEST['repo'];
+ }
+
+ /**
+ * output appropriate html
+ */
+ function html() {
+ global $conf;
+ ptln('<div id="config__manager">');
+ ptln(' <h1>'.$this->getLang('menu').'</h1>');
+ ptln($this->_donate());
+ ptln(' <fieldset>');
+ ptln(' <legend>'.$this->getLang('checkupdates').'</legend>');
+ $this->_form_open("checkupdates");
+ $this->_form_close('check');
+ if ($this->req=='checkupdates') {
+ $this->_checkupdates();
+ }
+ ptln(' </fieldset>');
+ ptln(' <fieldset>');
+ ptln(' <legend>Themes</legend>');
+ ptln(' <table class="inline">');
+ ptln(' <tr class="default"><td class="label" colspan="2">');
+ ptln(' <span class="outkey">'.$this->getLang('infos').'</span>');
+ ptln(' </td></tr>');
+ $n=0;
+ //cycles thru repositories urls
+ foreach ($this->repos['url'] as $url) {
+ ptln(' <tr class="search_hit"><td>');
+ $legend=($n == 0) ? $conf['title'] : $this->repos['url'][$n];
+ ptln(' <span><label><strong>'.$legend.'</strong></label></span>');
+ ptln(' </td>');
+ ptln(' <td class="value">');
+ $this->_form_open("fetch",$n);
+ $this->_form_close("fetch");
+ ptln(' </td></tr>');
+ //list requested theme
+ if ($n==$this->selected) {
+ ptln(' <tr class="default"><td colspan="2">');
+ if ($this->req=='install') $this->install($this->selected,$_REQUEST['name']);
+ if ($this->req=='upload' && $_REQUEST['name']) {
+ $info="";
+ if (isset($_REQUEST['author_info'])) {
+ $obfuscate = array('@' => ' [at] ', '.' => ' [dot] ', '-' => ' [dash] ');
+ $info .= "author=".strtr($_REQUEST['author_info'], $obfuscate)."\n";
+ }
+ if (isset($_REQUEST['url_info'])) $info .= "url=".$_REQUEST['url_info']."\n";
+ if (isset($_REQUEST['author_info'])) $info .= "description=".$_REQUEST['author_info'];
+ if (!$this->upload($_REQUEST['name'],$info)) msg($this->getLang('install_no'),-1);
+ }
+ if ($this->req=='delete' && $_REQUEST['name']) $this->_delete($_REQUEST['name']);
+ ptln(' </td></tr><tr><td colspan="2">');
+ $this->dolist($n);
+ ptln(' </td></tr>');
+ }
+ $n++;
+ }
+ ptln(' </table>');
+ ptln(' </fieldset>');
+ ptln('</div>');
+ }
+
+ /**
+ * Connect to theme repository and list themes
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function dolist($n) {
+ global $INFO;
+ if ($n === false) return;
+ //info.txt keys to parse
+ $keys=array('author','url','description');
+ $icos=explode(',',INDEXMENU_ICOS);
+ $turl="";
+ $info="";
+ //get list
+ $data=$this->_remotequery($this->repos['url'][$n]."/lib/plugins/indexmenu/ajax.php?req=local");
+ $data=explode(",",$data);
+ //print themes
+ for ($i=3;$i<count($data);$i++) {
+ $theme=$data[$i];
+ $turl=$data[1].$data[2]."/".$theme;
+ ptln(' <em>'.$theme.'</em>');
+ ptln(' <div class="indexmenu_list_themes">');
+ ptln(' <div>');
+ //print images
+ foreach (array_slice($icos,0,8) as $ico) {
+ $ext = explode(".", $theme);
+ $ext=array_pop($ext);
+ $ext=($ext == $theme) ? '.gif' : ".$ext";
+ ptln(' <img src="'.$turl."/".$ico.$ext.'" title="'.$ico.'" alt="'.$ico.'" />');
+ }
+ ptln(' </div>');
+ //get theme info.txt
+ if ($info=$this->_remotequery($turl."/info.txt",false)) {
+ foreach ($keys as $key) {
+ if (!preg_match('/'.$key.'=(.*)/',$info,$out)) continue;
+ ptln(" <div>");
+ ptln(" <strong>".hsc($key).": </strong>".hsc($out[1]));
+ ptln(" </div>");
+ }
+ }
+ if ($n == 0) {
+ $act="upload";
+ if ($theme != "default" ) {
+ $this->_form_open("delete",$n);
+ ptln(' <input type="hidden" name="name" value="'.$theme.'" />');
+ $this->_form_close("delete");
+ }
+ } else {
+ $act="install";
+ ptln(' <a href="'.$this->repos['url'][$n]."$repo/lib/plugins/indexmenu/ajax.php?req=send&amp;t=".$theme.'">Download</a>');
+ }
+ $this->_form_open($act,$n);
+ if ($n==0 && !is_file(INDEXMENU_IMG_ABSDIR."/".$theme."/info.txt")) {
+ ptln(' <div><strong>author:</strong><input type="text" name="author_info" value="'.$INFO["userinfo"]["name"].hsc(" <".$INFO["userinfo"]["mail"].">").'" size="50" maxlength="100" /><br />');
+ ptln(' <strong>url:</strong><input type="text" name="url_info" value="'.$this->repos['url'][$n].'" size="50" maxlength="200" /><br />');
+ ptln(' <strong>description:</strong><input type="text" name="description_info" value="" size="50" maxlength="200" /></div>');
+ }
+ ptln(' <input type="hidden" name="name" value="'.$theme.'" />');
+ $this->_form_close($act);
+ ptln(' <br /><br /></div>');
+ }
+ }
+
+ /**
+ * Download and install themes
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function install ($n,$name) {
+ $repo=$this->repos['url'][$n];
+ if (!isset($name)) return false;
+ $return=true;
+ if (!$absdir=$this->checktmpsubdir()) return;
+ $tmp=$absdir."/tmp";
+
+ //send theme list request
+ if (!$zipfile=io_download($repo."/lib/plugins/indexmenu/ajax.php?req=send&t=".$name,"$tmp/",true)) {
+ msg($this->getLang('down_err').": $name",-1);
+ $return=false;
+ } else {
+ //create zip
+ $zip=new PclZip("$tmp/$zipfile");
+ $regexp="/^".$name."\/(info.txt)|(style.css)|(".str_replace(",","|",INDEXMENU_ICOS).")\.(gif|png|jpg)$/i";
+ $status=$zip->extract(PCLZIP_OPT_PATH,$absdir."/",PCLZIP_OPT_BY_PREG,$regexp);
+ //error
+ if ($status == 0) {
+ msg($this->getLang('zip_err')." $tmp/$zipfile: ".$zip->errorName(true),-1);
+ $return=false;
+ } else {
+ msg("<strong>$name</strong> ".$this->getLang('install_ok'),1);
+ }
+ }
+ //clean tmp
+ $this->_rm_dir($tmp);
+ return $return;
+ }
+
+
+ /**
+ * Remove a directory
+ *
+ */
+ function _rm_dir($path) {
+ if (!is_string($path) || $path == "") return false;
+
+ if (is_dir($path)) {
+ if (!$dh = @opendir($path)) return false;
+
+ while ($f = readdir($dh)) {
+ if ($f == '..' || $f == '.') continue;
+ $this->_rm_dir("$path/$f");
+ }
+
+ closedir($dh);
+ return @rmdir($path);
+ } else {
+ return @unlink($path);
+ }
+
+ return false;
+ }
+
+ /**
+ * Retrive and create themes tmp directory
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function checktmpsubdir () {
+ $tmp=INDEXMENU_IMG_ABSDIR."/tmp";
+ if (!io_mkdir_p($tmp)) {
+ msg($this->getLang('dir_err').": $tmp",-1);
+ return false;
+ }
+ return INDEXMENU_IMG_ABSDIR;
+ }
+
+
+ /**
+ * Upload a theme into my site
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function upload($theme,$info) {
+ $return=true;
+ $host='samuele.netsons.org';
+ $path='/dokuwiki/lib/plugins/indexmenu/upload/index.php';
+ //TODO: merge zip creation with that in ajax.php (create a class?)
+ if (!$absdir=$this->checktmpsubdir()) return false;
+ $tmp=$absdir."/tmp";
+ $zipfile="$theme.zip";
+ $filelist="$absdir/$theme";
+ //create info
+ if (!empty($info)) {
+ io_savefile("$tmp/$theme/info.txt",$info);
+ $filelist .= ",$tmp/$theme";
+ }
+ //create zip
+ $zip=new PclZip("$tmp/$zipfile");
+ $status=$zip->create($filelist,PCLZIP_OPT_REMOVE_ALL_PATH);
+ if ($status == 0) {
+ //error
+ msg($this->getLang('zip_err').": ".$zip->errorName(true),-1);
+ $return=false;
+ } else {
+ //prepare POST headers.
+ $boundary = "---------------------------".uniqid("");
+ $data=join("", file("$tmp/$zipfile"));
+ $header="POST $path HTTP/1.0\r\n";
+ $header.= "Host: $host\r\n";
+ $header.= "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1) Gecko/20061024 Iceweasel/2.0 (Debian-2.0+dfsg-1)\r\n";
+ $header.= "Content-type: multipart/form-data, boundary=$boundary\r\n";
+ $body="--".$boundary."\r\n";
+ $body.= "Content-Disposition: form-data; name=\"userfile\"; filename=\"$zipfile\"\r\n";
+ $body.= "Content-Type: application/x-zip-compressed\r\n\r\n";
+ $body.=$data."\r\n";
+ $body.= "--".$boundary."\r\n";
+ $body.= "Content-Disposition: form-data; name=\"upload\"\r\n\r\n";
+ $body.= "Upload\r\n";
+ $body.="--".$boundary."--\r\n";
+ $header.= "Content-Length: ".strlen($body)."\r\n\r\n";
+
+ //connect and send zip
+ if ($fp = fsockopen($host, 80)) {
+ fwrite($fp,$header.$body);
+ //reply
+ $buf="";
+ while (!feof($fp)) {
+ $buf .= fgets($fp,3200);
+ }
+ fclose($fp);
+ //parse resply
+ if (preg_match("/<!--indexmenu-->(.*)<!--\/indexmenu-->/s",$buf,$match)) {
+ $str=substr($match[1],4,7);
+ switch ($str) {
+ case "ERROR ":
+ $mesg_type=-1;
+ break;
+ case "SUCCESS":
+ $mesg_type=1;
+ break;
+ default:
+ $mesg_type=2;
+ }
+ msg($match[1],$mesg_type);
+ } else {
+ $return=false;
+ }
+ } else {
+ $return=false;
+ }
+ }
+
+ $this->_rm_dir($tmp);
+ return $return;
+ }
+
+ /**
+ * Check for new messages from upstream
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _checkupdates() {
+ require_once (DOKU_INC.'inc/HTTPClient.php');
+ global $conf;
+ global $INFO;
+ $w=-1;
+ $date=$this->getInfo('date');
+ $date=$date['date'];
+ $data=$this->_remotequery("http://samuele.netsons.org/dokuwiki/lib/plugins/indexmenu/remote.php?check=$date");
+ if ($data==="") {
+ msg($this->getLang('noupdates'),1);
+ $data .= @preg_replace('/\n\n.*$/s','',@io_readFile(DOKU_PLUGIN.'indexmenu/changelog'))."\n%\n";
+ $w=1;
+ } else {
+ $data=preg_replace('/\<br(\s*)?\/?\>/i',"", $data);
+ $data=preg_replace('/\t/'," ", $data);
+ }
+ $data=preg_replace('/\[\[(?!(http|https))(.:)(.*?)\]\]/s',"[[plugin:$3]]", $data);
+ $data=preg_replace('/\[\[(?!(http|https))(.*?)\]\]/s',"[[http://www.dokuwiki.org/$2]]", $data);
+ $msgs = explode("\n%\n",$data);
+ foreach($msgs as $msg){
+ if($msg) {
+ $msg= p_render('xhtml',p_get_instructions($msg),$info);
+ msg($msg,$w);
+ }
+ }
+ }
+
+
+ /**
+ * Get url response and check it
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _remotequery($url,$tag=true) {
+ require_once (DOKU_INC.'inc/HTTPClient.php');
+ $http = new DokuHTTPClient();
+ $http->timeout = 8;
+ $data = $http->get($url);
+ if ($tag) {
+ if ($data===false) {
+ msg($this->getLang('conn_err'),-1);
+ } else {
+ (substr($data,0,9)==="indexmenu") ? $data=substr($data,9): $data="";
+ }
+ }
+ return $data;
+ }
+
+
+ /**
+ * Open an html form
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _form_open($act,$n=-1) {
+ ptln(' <form action="'.wl($ID).'" method="post">');
+ ptln(' <input type="hidden" name="do" value="admin" />');
+ ptln(' <input type="hidden" name="page" value="'.$this->getPluginName().'" />');
+ ptln(' <input type="hidden" name="req" value="'.$act.'" />');
+ ptln(' <input type="hidden" name="repo" value="'.$n.'" />');
+ }
+
+ /**
+ * Close the html form
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _form_close($act) {
+ ptln(' <input type="submit" name="btn" '.$this->repos['status'][$n].' value="'.$this->getLang($act).'" />');
+ ptln(' </form>');
+ }
+
+ /**
+ * Remove an installed theme
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _delete($theme) {
+ if ($theme=="default") return;
+ if ($this->_rm_dir(INDEXMENU_IMG_ABSDIR."/".utf8_encodeFN(basename($theme)))) {
+ msg($this->getLang('delete_ok').": $theme.",1);
+ } else {
+ msg($this->getLang('delete_no').": $theme.",-1);
+ }
+ }
+
+ /**
+ * Print the donate button.
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _donate() {
+ $out = "<fieldset>\n";
+ $out .= '<p>'.$this->getLang('donation_text').'</p>';
+ $out .= '<form action="https://www.paypal.com/cgi-bin/webscr" method="post">'."\n";
+ $out .= '<input type="hidden" name="cmd" value="_s-xclick" />'."\n";
+ $out .= '<input type="hidden" name="hosted_button_id" value="102873" />'."\n";
+ $out .= '<input type="image" src="https://www.paypal.com/en_US/i/btn/btn_donateCC_LG.gif" name="submit" alt="" />'."\n";
+ $out .= '<img alt="" src="https://www.paypal.com/it_IT/i/scr/pixel.gif" width="1" height="1" />'."\n";
+ $out .= "</form></fieldset>\n";
+ return $out;
+ }
+
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/ajax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/ajax.php
new file mode 100644
index 000000000..93b3d5f07
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/ajax.php
@@ -0,0 +1,196 @@
+<?php
+/**
+ * AJAX Backend for indexmenu
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ */
+
+//fix for Opera XMLHttpRequests
+if(!count($_POST) && @$HTTP_RAW_POST_DATA){
+ parse_str($HTTP_RAW_POST_DATA, $_POST);
+}
+
+if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../../').'/');
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_INC.'inc/init.php');
+require_once(DOKU_INC.'inc/auth.php');
+if(!defined('INDEXMENU_IMG_ABSDIR')) define('INDEXMENU_IMG_ABSDIR',DOKU_PLUGIN."indexmenu/images");
+//close session
+session_write_close();
+
+$ajax_indexmenu=new ajax_indexmenu_plugin;
+$ajax_indexmenu->render();
+
+class ajax_indexmenu_plugin {
+ /**
+ * Output
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+
+ function render () {
+ $req=$_REQUEST['req'];
+ $succ=false;
+ //send the zip
+ if ($req == 'send' and isset($_REQUEST['t'])) {
+ include(DOKU_PLUGIN.'indexmenu/inc/repo.class.php');
+ $repo=new repo_indexmenu_plugin;
+ $succ=$repo->send_theme($_REQUEST['t']);
+ }
+ if ($succ) return true;
+
+ header('Content-Type: text/html; charset=utf-8');
+ header('Cache-Control: public, max-age=3600');
+ header('Pragma: public');
+ switch ($req) {
+ case 'local':
+ //list themes
+ print $this->local_themes();
+ break;
+ case 'toc':
+ //print toc preview
+ if (isset($_REQUEST['id'])) print $this->print_toc($_REQUEST['id']);
+ break;
+ case 'index':
+ //print index
+ if (isset($_REQUEST['idx'])) print $this->print_index($_REQUEST['idx']);
+ break;
+ }
+ }
+
+ /**
+ * Print a list of local themes
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+
+ function local_themes() {
+ $list='indexmenu,'.DOKU_URL.",lib/plugins/indexmenu/images,";
+ $data=array();
+ $handle=@opendir(INDEXMENU_IMG_ABSDIR);
+ while (false !== ($file = readdir($handle))) {
+ if ( is_dir (INDEXMENU_IMG_ABSDIR.'/'.$file)
+ && $file != "."
+ && $file != ".."
+ && $file != "repository"
+ && $file != "tmp"
+ ) {
+ $data[]=$file;
+ }
+ }
+ closedir($handle);
+ sort($data);
+ $list .= implode(",",$data);
+ return $list;
+ }
+
+ /**
+ * Print a toc preview
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function print_toc($id) {
+ require_once(DOKU_INC.'inc/parser/xhtml.php');
+ $id=cleanID($id);
+ if (auth_quickaclcheck($id) < AUTH_READ) return;
+ $meta = p_get_metadata($id);
+ $toc = $meta['description']['tableofcontents'];
+ $out .= '<div class="tocheader toctoggle">'.DOKU_LF;
+ if (count($toc)>1) {
+ $out .= $this->render_toc($toc);
+ } else {
+ $out .= '<a href="'.wl($id).'">';
+ $out .= ($meta['title']) ? htmlspecialchars($meta['title']) : htmlspecialchars(noNS($id));
+ $out .= '</a>'.DOKU_LF;
+ if ($meta['description']['abstract']) {
+ $out .= '</div>'.DOKU_LF;
+ $out .= '<div class="indexmenu_toc_inside">'.DOKU_LF;
+ $out .= p_render('xhtml',p_get_instructions($meta['description']['abstract']),$info);
+ $out .= '</div>'.DOKU_LF;
+ }
+ }
+ $out .= '</div>'.DOKU_LF;
+ return $out;
+ }
+
+ /**
+ * Return the TOC rendered to XHTML
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function render_toc($toc){
+ global $lang;
+ $r = new Doku_Renderer_xhtml;
+ $r->toc = $toc;
+ $out .= $lang['toc'];
+ $out .= '</div>'.DOKU_LF;
+ $out .= '<div class="indexmenu_toc_inside">'.DOKU_LF;
+ $out .= html_buildlist($r->toc,'toc',array($this,'_tocitem'));
+ $out .= '</div>'.DOKU_LF;
+ return $out;
+ }
+
+ /**
+ * Callback for html_buildlist
+ */
+ function _tocitem($item){
+ $id=cleanID($_POST['id']);
+ return '<span class="li"><a href="'.wl($id,'#'.$item['hid'],false,'').'" class="toc">'.
+ htmlspecialchars($item['title']).'</a></span>';
+ }
+
+ /**
+ * Print index nodes
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function print_index($ns) {
+ require_once(DOKU_PLUGIN.'indexmenu/syntax/indexmenu.php');
+ global $conf;
+ $idxm=new syntax_plugin_indexmenu_indexmenu();
+ $ns=$idxm->_parse_ns($ns);
+ $level=-1;
+ $max=0;
+ $data = array();
+ if ($_REQUEST['max'] > 0) {
+ $max=$_REQUEST['max'];
+ $level=$max;
+ }
+ $nss= ($_REQUEST['nss']) ? cleanID($_REQUEST['nss']) : '';
+ $idxm->sort=$_REQUEST['sort'];
+ $idxm->msort=$_REQUEST['msort'];
+ $idxm->rsort=$_REQUEST['rsort'];
+ $idxm->nsort=$_REQUEST['nsort'];
+ $fsdir="/".utf8_encodeFN(str_replace(':','/',$ns));
+ $opts= array('level' => $level,
+ 'nons' => $_REQUEST['nons'],
+ 'nss' => array(array($nss,1)),
+ 'max' => $max,
+ 'js' => false,
+ 'nopg' => $_REQUEST['nopg'],
+ 'skip_index' => $idxm->getConf('skip_index'),
+ 'skip_file' => $idxm->getConf('skip_file'),
+ 'headpage' => $idxm->getConf('headpage'),
+ 'hide_headpage' => $idxm->getConf('hide_headpage')
+ );
+ if ($idxm->sort||$idxm->msort||$idxm->rsort) {
+ $idxm->_search($data,$conf['datadir'],array($idxm,'_search_index'),$opts,$fsdir);
+ } else {
+ search($data,$conf['datadir'],array($idxm,'_search_index'),$opts,$fsdir);
+ }
+ if ($_REQUEST['nojs']) {
+ require_once(DOKU_INC.'inc/html.php');
+ $out_tmp=html_buildlist($data,'idx',array($idxm,"_html_list_index"),"html_li_index");
+ $out.=preg_replace('/<ul class="idx">(.*)<\/ul>/s',"$1",$out_tmp);
+ } else {
+ $nodes=$idxm->_jsnodes($data,'',0);
+ $out="ajxnodes = [";
+ $out.=rtrim($nodes[0],",");
+ $out.="];";
+ }
+ return $out;
+ }
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/changelog b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/changelog
new file mode 100644
index 000000000..ec78c7c38
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/changelog
@@ -0,0 +1,207 @@
+ * **2009-08-29 Version 4.6**:
+ * //New Feature//: Namespace declaration complies with dokuwiki [[:namespaces#creating namespaces|namespaces]]. :!: **Important before upgrading from previuos versions**: according to the new dokuwiki syntax, a simple //main namespace// without relative declaration prefix (i.e: "playground") doesn't refer anymore to the subnamespace in the root namespace but in the **current** namespace. To refer to the root namespace, you need to prepend the ":" declaration to it. :!:
+ * //New Feature//: Added the //context// option. It resolves relative requested namespaces starting from the current user location instead of the page containing the indexmenu syntax.
+ * //New Feature//: Changed skip_file and skip_index syntax to use dokuwiki id instead of system paths. Thanks to Dmitry Katsubo.
+ * //New Feature//: Metatada titles are not rendered when recursively bulding the indexmenu tree. This will speed up the page loading when cache expires, but could not display the heading title for nodes without metadata infos.
+ * //New Feature//: Added the nojs button in the edit toolbar and toolbar CSS classes.
+ * //New Feature//: The right JS context menu is closed by any document click. Thanks to Urban.
+ * //Bug//: Fixed a bug which prevents page caching when it contains only indexmenu syntax.
+ * //Bug//: Disable JS indexmenu cookies in preview mode.
+ * //Bug//: Fixed an acl issue.
+ * //Bug//: Fixed UTF8 toc preview bug.
+
+ * **2009-01-04 Version 4.5**:
+ * //Bug//: Fixed a stupid bug with toolbar.
+
+ * **2008-12-02 Version 4.4**:
+ * //New Feature//: Added ajax for the nojs index view.
+ * //New Feature//: Added navbar support also in nojs mode, but unlike js mode, its page does not use cache.
+ * //New Feature//: Added nopg option. Thanks to Sebastian E.
+ * //New Feature//: Toc preview displays rendered instructions instead of raw text when toc is empty.
+ * //New Feature//: German translation by Fabian Pfannes.
+ * //Bug//: Fixed acl bugs that prevents js mode to work correctly.
+ * //Bug//: Fixed a bug with [[plugin:indexmenu#only_admins|Only Admins]] option.
+ * //Bug//: Fixed a bug that prevents to disable the context menu.
+ * //Bug & Features//: id for navbar trees is now random by default + Minor bug fixes and improvements.
+ * //Others//: [[http://samuele.netsons.org/dokuwiki/doku.php?id=dokuwiki:plugins:indexmenu#donation|Donation]] button added.
+
+ * **2008-04-12 Version 4.3**:
+ * New Feature: Different js [[plugin:indexmenu#the_context_menu|context menus]] for anonymous, authenticated and admin user.
+ * Bug: Dokuwiki RC2008-04-11 compatible.
+ * Bug: Context menu should now support all userewrite and useslash DW config options.
+ * Bug: Fixed msort to work with nsort when in non-js mode.
+
+ * **2008-03-10 Version 4.2**:
+ * Bug: Fixed loop with nsort option. Thanks to Thomas Binder.
+ * Bug: Do not display empty namespace icon for empty headpages.
+ * Bug: Fixed navbar not working with max option and a main namespace different from root.
+ * Bug: Context menu "New page here" item creates the right page for headpages.
+
+ * **2008-02-16 Version 4.1**:
+ * New Feature: Indexmenu tree behaviour depends on the [[wiki:config#sneaky_index]] option. More info in the [[.:indexmenu#about ACLs]] section. Please read carefully the note about dokuwiki versions that do not support it.
+ * New Feature: Fixed some issues with Acls and empty namespaces. More info in the section [[.:indexmenu#about empty namespaces]].
+ * New Feature: Added the "Search in this namespace" option in the contextmenu. Thanks to Herman Huitema.
+ * Bug: Fixed broken js tree with dokuwiki search engine when node contains an highlighted word.
+ * Bugs: Fixed broken toolbar element when the dokuwiki js compact option is on.
+ * Bug: Single quote in dokuwiki config [[wiki:config#title]] breaks js tree when [[.:indexmenu#Namespaces title and link|headpage]] option is not configured.
+ * Changes: Minor contextmenu styling changes.
+
+ * **2007-10-26 Version 4.0**:
+ * New Feature: Added a customizable context menu (right click) for pages/namespaces common actions.
+ * New Feature: Added nsort option in order to sorts namespaces according to tsort/dsort/msort options.
+ * Bugs: Fixed a xhtml compatibility bug with msort and max option.
+ * Changes: Automatically scroll navbar menu to fit the current page.
+
+ * **2007-08-30 Version 3.9**:
+ * New Feature: Added options to sort by title, date and by custom metadata. Infos in the [[.:indexmenu#syntax]] section. Metadata sorting idea was "stolen" from [[.:fullindex]] plugin so thanks to the its author.
+ * New Feature: Added the %%{{indexmenu_n>N}}%% syntax to set a custom number used by metadata sorting. Infos in the [[.:indexmenu#syntax]] section.
+ * New Feature: Support for custom css styles based on theme. Infos in the [[.:indexmenu#css style]] section. An example is in the thread theme on the indexmenu repository.
+ * Changes: Added more options to the indexmenu toolbar in edit mode.
+ * Changes: Changed the scrolling tree style and usability. It does not anymore scroll automatically when node gets focus.
+
+ * **2007-07-11 Version 3.8**:
+ * Bug: Solved bugs when using url rewriting.
+ * Bug: Solved a bug in the css width property of toc preview div.
+
+ * **2007-07-07 Version 3.7**:
+ * Bug: Navbar did not work in ie6/7 with max option on.
+ * Bug: The js tree was wrong with headpages off.
+
+ * **2007-07-05 Version 3.6**:
+ * New Feature: Added max option to load nodes from ajax. This will significantly speed up the index in sites with an high amount of pages.
+ * Changes: Old max option renamed to maxjs.
+
+ * **2007-06-10 Version 3.5**:
+ * Bug: tsort option did not sort namespaces.
+
+ * **2007-06-08 Version 3.4**:
+ * New Feature: Added option "tsort" to sort nodes by title.
+ * Security Fix: Fixed ajax security with toc preview.
+
+ * **2007-06-04 Version 3.3**:
+ * :!: You could need to purge browser cache after installing it.
+ * New Feature: Added a Toc preview for javascript tree. You can disable it with "notoc" option.
+ * New Feature: The tree is always automatically updated with every requested namespace. You don't need anymore any ~~NOCACHE~~ or &purge options.
+ * New Feature: Acls work correctly with every requested namespace. Be sure to set correctly the [[.:indexmenu#acl cache]] option.
+ * New Feature: Added a global option to replace the dokuwiki index with an indexmenu page.
+ * New Feature: Added the global "Acl cache" option in order to optimize the acl caching mechanism. Please, read info at [[.:indexmenu#acl cache]].
+ * Changes: The size of the scrolling arrow image adjusts itself dynamically.
+ * Changes: Added the uncompressed javascript file for development purpose.
+ * Bug: The "Deny indexmenu to no-admins" now works correctly.
+
+ * **2007-05-10 Version 3.2**:
+ * Bug: Solved acl bug. It works only for root requested namespace.
+ * Bug: Solved start page bug. Patch by Adrien CLERC, thanks.
+
+ * **2007-03-14 Version 3.1**:
+ * :!: You could need to purge browser cache after installing it.
+ * New Feature: Themes deleting option in admin panel.
+ * Bug-New Feature: No-tree message now works and it supports wiki instructions.
+ * Bug: Js tree does not scroll anymore when nodes are visibles.
+ * Bug: Solved a bug with utf8 that prevented hidepages to work with no ASCII characters.
+ * Changes: Removed the automatic checking for updates option, because it slows down a bit the pages loading. Now it's manual and it's in admin panel.
+
+ * **2007-01-25 Version 3.0**:
+ * New Feature: Quick initial tree render thanks to the max option.
+ * New Feature: Max option to set how many js tree levels initially render. By default is set to 1 to speed up initial page loading.
+ * New feature: Scrolling js tree when nodes length do not fit its container.
+ * New Feature: Js tree highligts the current page.
+ * New Feature: Added js tooltips.
+ * Change: Removed the theme images directory setting to avoid problems. A symlink do the same work and in a simplest way.
+ * Change: Nojs tree is displayed when javascript is disabled or fails.
+ * Bug: The heading titles option for pages now works only if the global useheading setting is on.
+ * Bug: Pages that does not contain anymore indexmenu instructions are nomore cache purged by indexmenu itself.
+ * Bug: Indexmenu is xhtml compatible.
+ * Others: Code improvements and cleaning. A big thanks to Anja Wagenbret for testing and helping.
+
+ * **2006-12-19 Version 2.9**:
+ * New feature: The tree is automatically updated when the specified namespaces is the site root (..).
+ You don't need anymore to use the NOCACHE istruction.
+ * New feature: Indexmenu theme management in admin panel. You can download and share js themes.
+ * New feature: "navbar" option: the tree opens automatically itself at the current page namespace.
+ Good as navigation sidebar.
+ * Changed: Disabled custom css style for nojs menu when headpage is off.
+ * Bug: Firefox sometimes corrupt cached dokuwiki javascript.
+ This is an attempt to solve this bug, i hope it works (any feedback is welcome).
+ * Bug: Displayed incorrect titles when headpages are disable.
+
+ * **2006-11-09 Version 2.8**:
+ * New Feature: Option to deny the indexmenu use to no-admins.
+ * New Feature: Option to check for indexmenu updates when in admin mode ((need web connection to my site)).
+ * New Feature: Css style for namespaces and headpages links in nojs status as suggested by Mathiasm.
+ * New Feature: Support for png and jpg images formats for the js theme.
+ * Bug: Solved the Call-time pass-by-reference php5 bug.
+ * Changed: Changed some static css property into dynamic.
+
+ * **2006-10-23 Version 2.7**:
+ * :!: The default release is Compatible with Dokuwiki RC and it's configurable throught [[plugin:config|Configuration Manager]]. 2006-09-03 Dokuwiki users should read the [[.:indexmenu#How to install]] infos.
+ * Changes: Optional namespaces now works as you expect.
+ * Bug Fixed: Indexmenu button toolbar not showed when page is readonly. Thanks to [[neospams@vodafone.de|Neosky]].
+ * Bug Fixed: Escape of html in titles.
+ * Changes: Better displaying of default theme icons on dark background. Thanks to Paul Grove.
+ * Cosmetic code changes.
+ * **2006-10-7 Version 2.6**:
+ * New feature: Optional namespaces option.
+ * New feature: ".:ns" now specifies the "ns" namespace inside current namespace.
+ * Changes: "Cookie" option substituted by "nocookie" option. Now cookies are enabled by default.
+ * New feature: Custom headpages icon and css style in js mode.
+ * New feature: Added a Dtree option that should speed up the tree rendering.
+ * New feature: If scripts are disabled by the browser, standard tree will be showed in place of js one.
+ * New feature: Skip files option. Coded by Jon B (thanks).
+ * New feature: Customizable js theme directory path.
+ * New feature: Indexmenu toolbar in "edit page" mode.
+
+ * **2006-09-10 Version 2.5**:
+ * New feature: More customizable headpage option ((old "true" value is automatically translated into the :inside: option)).
+ * New feature: Js cookie option.
+ * New feature: Js id option. Many thanks to [[frbaron@gmail.com|Franck Baron]].
+ * New feature: Skip index option. Many thanks to [[ilya@lebedev.net|Ilya Lebedev AKA WingedFox]].
+ * Fixed bug: Incorrect ACL namespace. Many thanks to [[raymond@raycom.com|Raymond Elferink]].
+
+ * **2006-07-10 Version 2.4**:
+ * Fixed bug: Strange behaviours when using [[wiki:config#userewrite]] and [[wiki:config#useslash]].
+ * Fixed bug: No namespace title when the "." namespace is requested.
+ * Fixed bug: When title of the page contains %%'%% symbol, indexmenu fails.
+
+ * **2006-06-25 Version 2.3**:
+ * Fixed bug: incorrect namespaces levels. Many thanks to [[http://fredfred.net/skriker|malyfred]].
+ * Fixed bug: empty namespace title if headpage has no title.
+ * Fixed bug: nons doesn't work with js option.
+ * Fixed bug: parameters check.
+ * Fixed bug: start page is not hidden with js option.
+ * Fixed bug: acl denied namespaces are displayed. info [[.:indexmenu#about_acl|here]].
+
+ * **2006-06-13 Version 2.2**:
+is for the [[http://www.destroydrop.com/javascripts/tree/|dTree]] menu. Thanks to the [[.:tree]] plugin for the idea.
+ * Custom themes and style for javascript menu.
+
+ * **2006-06-12 Version 2.1**:
+ * Changed the way ''headpage'' option works.
+ * Added ''hide_headpage'' option to hide headpages.
+
+ * **2006-06-12 Version 2.0**:
+ * Added the ''headpage'' global configuration option to customize namespaces title and link. Thanks to [[bru@inbox.ru|Gleb]] for this nice idea.
+ *Javascript level bug fixed.
+ *Changed the base icon in default js theme.
+
+ * **2006-04-05 Version 1.9**:
+ * Added the javascript tree method. Thanks to Geir Landr
+
+ * **2006-04-05 Version 1.4**:
+ * Replaced the ''closed'' argument with a more powerful level number option. I guess it is the last modification on this argument.
+ * Small code fix.
+
+ * **2006-04-04 Version 1.3**:
+ * New ''nons'' option for excluding namespace items from index as suggested by //[[bru@inbox.ru|Gleb]]//.
+ * Some cosmetic changes (changed the argument name for closed index).
+
+ * **2006-04-01 Version 1.2**:
+ * Root namespace index. Thanks to [[cbeetle@physics.fau.edu|Chris Beetle]].
+
+ * **2006-03-29 Version 1.1**:
+ * Recursive tree index of all pages and namespaces beneath the specified namespace.
+ * Lexical option for disabling the tree index and only showing the first level.
+
+ * **2006-03-24 Version 1.0**:
+ * Released.
+ * Fixed bug in namespaces title visualization.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/conf/default.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/conf/default.php
new file mode 100644
index 000000000..7c0f46228
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/conf/default.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Default configuration for indexmenu plugin
+ *
+ * @license: GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author: Samuele Tognini <samuele@netsons.org>
+ */
+$conf['only_admins'] = 0;
+$conf['aclcache'] = 'groups';
+$conf['headpage'] = ':start:,:same:,:inside:';
+$conf['hide_headpage'] = 1;
+$conf['page_index'] = '';
+$conf['empty_msg'] = '';
+$conf['skip_index'] = '';
+$conf['skip_file'] = 'sidebar';
+$conf['show_sort'] = true;
+$conf['themes_url'] = 'http://samuele.netsons.org/dokuwiki';
+$conf['be_repo'] = false;
+$conf['sneaky_index'] = (isset($GLOBALS['conf']['sneaky_index'])) ? $GLOBALS['conf']['sneaky_index'] : true;
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/conf/metadata.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/conf/metadata.php
new file mode 100644
index 000000000..cd45f163a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/conf/metadata.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Configuration-manager metadata for indexmenu plugin
+ *
+ * @license: GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author: Samuele Tognini <samuele@netsons.org>
+ */
+$meta['only_admins'] = array('onoff');
+$meta['aclcache'] = array('multichoice', '_choices' => array('none', 'user' ,'groups'));
+$meta['headpage'] = array('multicheckbox', '_choices' => array(':start:', ':same:' ,':inside:'));
+$meta['hide_headpage'] = array('onoff');
+$meta['page_index'] = array('string', '_pattern' => '#^[a-z:]*#');
+$meta['empty_msg'] = array('string');
+$meta['skip_index'] = array('string','_pattern' => '/^($|\/.*\/.*$)/');
+$meta['skip_file'] = array('string','_pattern' => '/^($|\/.*\/.*$)/');
+$meta['show_sort'] = array('onoff');
+//$meta['themes_url'] = array('string','_pattern' => '/^($|http:\/\/\S+$)/i');
+//$meta['be_repo'] = array('onoff');
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/edit-full.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/edit-full.js
new file mode 100644
index 000000000..9ab87c8a8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/edit-full.js
@@ -0,0 +1,152 @@
+function indexmenu_toolbar_additions() {
+ var edbtn,cmenu,indx_btn,toolbar = DOKUid('tool__bar');
+ if(!toolbar) return;
+ edbtn = DOKUid('edbtn__save');
+ if(!edbtn) return;
+ var indx_list = indexmenu_createPicker('picker_plugin_indexmenu');
+ indx_btn = indexmenu_createToolbar();
+ toolbar.appendChild(indx_btn);
+ indx_btn.onclick = function(){indexmenu_ajaxmenu('req=local',indx_list,this,false,indexmenu_createThemes);return false;};
+ cmenu=window.indexmenu_contextmenu;
+ if(cmenu[1]) {
+ window.indexmenu_contextmenu[0]=cmenu[1].concat(cmenu[0]);
+ }
+}
+
+function indexmenu_createThemes(data,indx_list) {
+ if (data.substring(0,9) != 'indexmenu') {
+ indx_list.innerHTML="Retrieving error";
+ return;
+ }
+ var checkboxes=[['<p><strong><em>Navigation</em></strong></p>',0],
+ ['navbar','The tree opens at the current namespace'],
+ ['context','Display the tree of the current wiki namespace context'],
+ ['nocookie','Don\t remember open/closed nodes during user navigation'],
+ ['noscroll','Prevent to scrolling the tree when it does not fit its container width'],
+ ['notoc','Disable the toc preview feature'],
+ ['<p><strong><em>Sort</em></strong></p>',0],
+ ['nsort','Sort also namespaces'],
+ ['tsort','By title'],
+ ['dsort','By date'],
+ ['msort','By meta tag'],
+ ['<p><strong><em>Performance</em></strong></p>',0],
+ ['max#2','How many levels to render with ajax when a node is opened'],
+ ['maxjs#2','How many levels to render in the client browser when a node is opened'],
+ ['<p><strong><em>Filters</em></strong></p>',0],
+ ['nons','Show only pages'],
+ ['nopg','Show only namespaces']];
+
+ var btn,key,theme_url,adata,f,f2,l,fo;
+ adata=data.split(',');
+ theme_url = DOKU_MEDIA + 'lib/plugins/indexmenu/images/';
+ f=indexmenu_toolFrame(indx_list,'Indexmenu');
+ l = document.createElement('div');
+ l.className = 'no indexmenu_nojstoolbar';
+ f.appendChild(l);
+ btn = createToolButton(DOKU_MEDIA + 'lib/tpl/default/images/open.gif','nojs index');
+ btn.innerHTML += 'Nojs';
+ btn.className = 'pickerbutton';
+ eval('btn.onclick = function(){indexmenu_opts("");}');
+ l.appendChild(btn);
+
+ l = document.createElement('div');
+ l.className = 'no indexmenu_jstoolbar';
+ f.appendChild(l);
+ if (adata[0] != 'indexmenu') {
+ l.innerHTML += 'No themes';
+ adata=[];
+ } else {
+ adata.splice(0,3);
+ }
+ for (key in adata) {
+ btn = createToolButton(theme_url + adata[key]+'/base.'+indexmenu_findExt(adata[key]),adata[key]);
+ btn.className = 'pickerbutton';
+ eval('btn.onclick = function(){indexmenu_opts("js#'+adata[key]+'");}');
+ l.appendChild(btn);
+ }
+ f2=indexmenu_toolFrame(indx_list,'Options');
+ fo=document.createElement('form');
+ fo.id='indexmenu_optfrm';
+ fo.className='indexmenu_opts';
+ f2.appendChild(fo);
+ for (key in checkboxes) {
+ lc = document.createElement('label');
+ lc.innerHTML=checkboxes[key][0]+' ';
+ if (checkboxes[key][1]) {
+ lc.title= checkboxes[key][1];
+ btn=document.createElement('input');
+ btn.type = 'checkbox';
+ btn.name = 'check';
+ btn.title = checkboxes[key][1];
+ btn.value = checkboxes[key][0];
+ fo.appendChild(btn);
+ }
+ fo.appendChild(lc);
+ }
+
+ l = document.createElement('div');
+ l.className = 'indexmenu_extratoolbar';
+ l.innerHTML='<p><strong><em>Extra</em></strong></p>';
+ f.appendChild(l);
+ btn = createToolButton(theme_url+'/msort.gif','Insert the sort meta-number');
+ btn.className = 'pickerbutton';
+ btn.onclick = function(){insertTags(
+ 'wiki__text',
+ '{{indexmenu_n>',
+ '}}',
+ '1'
+ );
+ DOKUid('picker_plugin_indexmenu').style.display='none';
+ return false;
+ };
+ l.appendChild(btn);
+}
+
+function indexmenu_createToolbar (){
+ var indx_ico = document.createElement('img');
+ indx_ico.src = DOKU_MEDIA + 'lib/plugins/indexmenu/images/indexmenu_toolbar.png';
+ var indx_btn = document.createElement('button');
+ indx_btn.id = 'syntax_plugin_indexmenu';
+ indx_btn.className = 'toolbutton';
+ indx_btn.title = 'Insert the Indexmenu tree';
+ indx_btn.appendChild(indx_ico);
+ return indx_btn;
+}
+
+function indexmenu_opts(m) {
+ var i,v = '';
+ var f=DOKUid('indexmenu_optfrm');
+ for (i=0; i < f.length; i++) {
+ if (f[i].checked) {
+ v = v + ' ' + f[i].value;
+ }
+ }
+ insertTags(
+ 'wiki__text',
+ '{{indexmenu>',
+ ((m||v)?'|':'')+m.replace(/#default$/,'')+v+'}}',
+ '#1'
+ );
+ DOKUid('picker_plugin_indexmenu').style.display='none';
+ return false;
+}
+
+function indexmenu_insertTags(lnk,sep) {
+ var r,l=lnk;
+ if (sep) {
+ r=new RegExp (sep,"g");
+ l=lnk.replace(r,':');
+ }
+ insertTags('wiki__text','[[',']]',l);
+}
+
+function indexmenu_toolFrame(parent,txt) {
+ f=document.createElement('fieldset');
+ l=document.createElement('legend');
+ l.innerHTML='<strong>'+txt+'</strong>';
+ f.appendChild(l);
+ parent.appendChild(f);
+ return f;
+}
+
+indexmenu_toolbar_additions();
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/edit.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/edit.js
new file mode 100644
index 000000000..7deb5a596
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/edit.js
@@ -0,0 +1 @@
+function indexmenu_toolbar_additions(){var e,d,c,b=DOKUid("tool__bar");if(!b){return;}e=DOKUid("edbtn__save");if(!e){return;}var a=indexmenu_createPicker("picker_plugin_indexmenu");c=indexmenu_createToolbar();b.appendChild(c);c.onclick=(function(){indexmenu_ajaxmenu("req=local",a,this,false,indexmenu_createThemes);return false;});d=window.indexmenu_contextmenu;if(d[1]){window.indexmenu_contextmenu[0]=d[1].concat(d[0]);}}function indexmenu_createThemes(k,j){if(k.substring(0,9)!="indexmenu"){j.innerHTML="Retrieving error";return;}var i=[["<p><strong><em>Navigation</em></strong></p>",0],["navbar","The tree opens at the current namespace"],["context","Display the tree of the current wiki namespace context"],["nocookie","Don\t remember open/closed nodes during user navigation"],["noscroll","Prevent to scrolling the tree when it does not fit its container width"],["notoc","Disable the toc preview feature"],["<p><strong><em>Sort</em></strong></p>",0],["nsort","Sort also namespaces"],["tsort","By title"],["dsort","By date"],["msort","By meta tag"],["<p><strong><em>Performance</em></strong></p>",0],["max#2","How many levels to render with ajax when a node is opened"],["maxjs#2","How many levels to render in the client browser when a node is opened"],["<p><strong><em>Filters</em></strong></p>",0],["nons","Show only pages"],["nopg","Show only namespaces"]];var h,g,f,e,d,c,b,a;e=k.split(",");f=DOKU_MEDIA+"lib/plugins/indexmenu/images/";d=indexmenu_toolFrame(j,"Indexmenu");b=document.createElement("div");b.className="no indexmenu_nojstoolbar";d.appendChild(b);h=createToolButton(DOKU_MEDIA+"lib/tpl/default/images/open.gif","nojs index");h.innerHTML+="Nojs";h.className="pickerbutton";eval("b.onclick = function(){indexmenu_opts(\"\");}");b.appendChild(h);b=document.createElement("div");b.className="no indexmenu_jstoolbar";d.appendChild(b);if(e[0]!="indexmenu"){b.innerHTML+="No themes";e=[];}else{e.splice(0,3);}for(g in e){h=createToolButton(f+e[g]+"/base."+indexmenu_findExt(e[g]),e[g]);h.className="pickerbutton";eval("h.onclick = function(){indexmenu_opts(\"js#"+e[g]+"\");}");b.appendChild(h);}c=indexmenu_toolFrame(j,"Options");a=document.createElement("form");a.id="indexmenu_optfrm";a.className="indexmenu_opts";c.appendChild(a);for(g in i){lc=document.createElement("label");lc.innerHTML=i[g][0]+" ";if(i[g][1]){lc.title=i[g][1];h=document.createElement("input");h.type="checkbox";h.name="check";h.title=i[g][1];h.value=i[g][0];a.appendChild(h);}a.appendChild(lc);}b=document.createElement("div");b.className="indexmenu_extratoolbar";b.innerHTML="<p><strong><em>Extra</em></strong></p>";d.appendChild(b);h=createToolButton(f+"/msort.gif","Insert the sort meta-number");h.className="pickerbutton";h.onclick=(function(){insertTags("wiki__text","{{indexmenu_n>","}}","1");DOKUid("picker_plugin_indexmenu").style.display="none";return false;});b.appendChild(h);}function indexmenu_createToolbar(){var b=document.createElement("img");b.src=DOKU_MEDIA+"lib/plugins/indexmenu/images/indexmenu_toolbar.png";var a=document.createElement("button");a.id="syntax_plugin_indexmenu";a.className="toolbutton";a.title="Insert the Indexmenu tree";a.appendChild(b);return a;}function indexmenu_opts(d){var c,b="";var a=DOKUid("indexmenu_optfrm");for(c=0;c<a.length;c++){if(a[c].checked){b=b+" "+a[c].value;}}insertTags("wiki__text","{{indexmenu>",((d||b)?"|":"")+d.replace(/#default$/,"")+b+"}}","#1");DOKUid("picker_plugin_indexmenu").style.display="none";return false;}function indexmenu_insertTags(d,c){var b,a=d;if(c){b=new RegExp(c,"g");a=d.replace(b,":");}insertTags("wiki__text","[[","]]",a);}function indexmenu_toolFrame(b,a){f=document.createElement("fieldset");l=document.createElement("legend");l.innerHTML="<strong>"+a+"</strong>";f.appendChild(l);b.appendChild(f);return f;}indexmenu_toolbar_additions();
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/close.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/close.gif
new file mode 100644
index 000000000..8c07da8ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/close.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/base.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/base.gif
new file mode 100644
index 000000000..ced7f0879
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/base.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/empty.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/empty.gif
new file mode 100644
index 000000000..b5cf52378
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/empty.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folder.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folder.gif
new file mode 100644
index 000000000..0d7d6431b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folder.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderh.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderh.gif
new file mode 100644
index 000000000..c7c9f7ed6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderh.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderhopen.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderhopen.gif
new file mode 100644
index 000000000..20fe6ace1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderhopen.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderopen.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderopen.gif
new file mode 100644
index 000000000..a9c466a5b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderopen.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/info.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/info.txt
new file mode 100644
index 000000000..1b1d8cde3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/info.txt
@@ -0,0 +1,2 @@
+author=Samuele Tognini
+url=http://samuele.netsons.org/dokuwiki
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/join.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/join.gif
new file mode 100644
index 000000000..34dd47610
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/join.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/joinbottom.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/joinbottom.gif
new file mode 100644
index 000000000..48b81c80a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/joinbottom.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/line.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/line.gif
new file mode 100644
index 000000000..1a259eea0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/line.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minus.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minus.gif
new file mode 100644
index 000000000..3d212a97a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minus.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minusbottom.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minusbottom.gif
new file mode 100644
index 000000000..dc3198be2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minusbottom.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_minus.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_minus.gif
new file mode 100644
index 000000000..2592ac20f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_minus.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_plus.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_plus.gif
new file mode 100644
index 000000000..f258ce211
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_plus.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/page.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/page.gif
new file mode 100644
index 000000000..5d120fa99
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/page.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plus.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plus.gif
new file mode 100644
index 000000000..b2c997233
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plus.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plusbottom.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plusbottom.gif
new file mode 100644
index 000000000..b5671d891
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plusbottom.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/empty.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/empty.gif
new file mode 100644
index 000000000..afbe6429d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/empty.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/indexmenu_toolbar.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/indexmenu_toolbar.png
new file mode 100644
index 000000000..460e0f981
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/indexmenu_toolbar.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/larrow.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/larrow.gif
new file mode 100644
index 000000000..a0f09e9d1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/larrow.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/msort.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/msort.gif
new file mode 100644
index 000000000..5dae8131d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/msort.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/rarrow.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/rarrow.gif
new file mode 100644
index 000000000..58a4158f5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/rarrow.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/toc_bullet.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/toc_bullet.gif
new file mode 100644
index 000000000..a90924ce8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/toc_bullet.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/inc/pclzip.lib.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/inc/pclzip.lib.php
new file mode 100644
index 000000000..19f20b9da
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/inc/pclzip.lib.php
@@ -0,0 +1,5748 @@
+<?php
+// --------------------------------------------------------------------------------
+// PhpConcept Library - Zip Module 2.5
+// --------------------------------------------------------------------------------
+// License GNU/LGPL - Vincent Blavet - March 2006
+// http://www.phpconcept.net
+// --------------------------------------------------------------------------------
+//
+// Presentation :
+// PclZip is a PHP library that manage ZIP archives.
+// So far tests show that archives generated by PclZip are readable by
+// WinZip application and other tools.
+//
+// Description :
+// See readme.txt and http://www.phpconcept.net
+//
+// Warning :
+// This library and the associated files are non commercial, non professional
+// work.
+// It should not have unexpected results. However if any damage is caused by
+// this software the author can not be responsible.
+// The use of this software is at the risk of the user.
+//
+// --------------------------------------------------------------------------------
+// $Id: pclzip.lib.php,v 1.44 2006/03/08 21:23:59 vblavet Exp $
+// --------------------------------------------------------------------------------
+
+ // ----- Constants
+ define( 'PCLZIP_READ_BLOCK_SIZE', 2048 );
+
+ // ----- File list separator
+ // In version 1.x of PclZip, the separator for file list is a space
+ // (which is not a very smart choice, specifically for windows paths !).
+ // A better separator should be a comma (,). This constant gives you the
+ // abilty to change that.
+ // However notice that changing this value, may have impact on existing
+ // scripts, using space separated filenames.
+ // Recommanded values for compatibility with older versions :
+ //define( 'PCLZIP_SEPARATOR', ' ' );
+ // Recommanded values for smart separation of filenames.
+ define( 'PCLZIP_SEPARATOR', ',' );
+
+ // ----- Error configuration
+ // 0 : PclZip Class integrated error handling
+ // 1 : PclError external library error handling. By enabling this
+ // you must ensure that you have included PclError library.
+ // [2,...] : reserved for futur use
+ define( 'PCLZIP_ERROR_EXTERNAL', 0 );
+
+ // ----- Optional static temporary directory
+ // By default temporary files are generated in the script current
+ // path.
+ // If defined :
+ // - MUST BE terminated by a '/'.
+ // - MUST be a valid, already created directory
+ // Samples :
+ // define( 'PCLZIP_TEMPORARY_DIR', '/temp/' );
+ // define( 'PCLZIP_TEMPORARY_DIR', 'C:/Temp/' );
+ define( 'PCLZIP_TEMPORARY_DIR', '' );
+
+// --------------------------------------------------------------------------------
+// ***** UNDER THIS LINE NOTHING NEEDS TO BE MODIFIED *****
+// --------------------------------------------------------------------------------
+
+ // ----- Global variables
+ $g_pclzip_version = "2.5";
+
+ // ----- Error codes
+ // -1 : Unable to open file in binary write mode
+ // -2 : Unable to open file in binary read mode
+ // -3 : Invalid parameters
+ // -4 : File does not exist
+ // -5 : Filename is too long (max. 255)
+ // -6 : Not a valid zip file
+ // -7 : Invalid extracted file size
+ // -8 : Unable to create directory
+ // -9 : Invalid archive extension
+ // -10 : Invalid archive format
+ // -11 : Unable to delete file (unlink)
+ // -12 : Unable to rename file (rename)
+ // -13 : Invalid header checksum
+ // -14 : Invalid archive size
+ define( 'PCLZIP_ERR_USER_ABORTED', 2 );
+ define( 'PCLZIP_ERR_NO_ERROR', 0 );
+ define( 'PCLZIP_ERR_WRITE_OPEN_FAIL', -1 );
+ define( 'PCLZIP_ERR_READ_OPEN_FAIL', -2 );
+ define( 'PCLZIP_ERR_INVALID_PARAMETER', -3 );
+ define( 'PCLZIP_ERR_MISSING_FILE', -4 );
+ define( 'PCLZIP_ERR_FILENAME_TOO_LONG', -5 );
+ define( 'PCLZIP_ERR_INVALID_ZIP', -6 );
+ define( 'PCLZIP_ERR_BAD_EXTRACTED_FILE', -7 );
+ define( 'PCLZIP_ERR_DIR_CREATE_FAIL', -8 );
+ define( 'PCLZIP_ERR_BAD_EXTENSION', -9 );
+ define( 'PCLZIP_ERR_BAD_FORMAT', -10 );
+ define( 'PCLZIP_ERR_DELETE_FILE_FAIL', -11 );
+ define( 'PCLZIP_ERR_RENAME_FILE_FAIL', -12 );
+ define( 'PCLZIP_ERR_BAD_CHECKSUM', -13 );
+ define( 'PCLZIP_ERR_INVALID_ARCHIVE_ZIP', -14 );
+ define( 'PCLZIP_ERR_MISSING_OPTION_VALUE', -15 );
+ define( 'PCLZIP_ERR_INVALID_OPTION_VALUE', -16 );
+ define( 'PCLZIP_ERR_ALREADY_A_DIRECTORY', -17 );
+ define( 'PCLZIP_ERR_UNSUPPORTED_COMPRESSION', -18 );
+ define( 'PCLZIP_ERR_UNSUPPORTED_ENCRYPTION', -19 );
+ define( 'PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE', -20 );
+ define( 'PCLZIP_ERR_DIRECTORY_RESTRICTION', -21 );
+
+ // ----- Options values
+ define( 'PCLZIP_OPT_PATH', 77001 );
+ define( 'PCLZIP_OPT_ADD_PATH', 77002 );
+ define( 'PCLZIP_OPT_REMOVE_PATH', 77003 );
+ define( 'PCLZIP_OPT_REMOVE_ALL_PATH', 77004 );
+ define( 'PCLZIP_OPT_SET_CHMOD', 77005 );
+ define( 'PCLZIP_OPT_EXTRACT_AS_STRING', 77006 );
+ define( 'PCLZIP_OPT_NO_COMPRESSION', 77007 );
+ define( 'PCLZIP_OPT_BY_NAME', 77008 );
+ define( 'PCLZIP_OPT_BY_INDEX', 77009 );
+ define( 'PCLZIP_OPT_BY_EREG', 77010 );
+ define( 'PCLZIP_OPT_BY_PREG', 77011 );
+ define( 'PCLZIP_OPT_COMMENT', 77012 );
+ define( 'PCLZIP_OPT_ADD_COMMENT', 77013 );
+ define( 'PCLZIP_OPT_PREPEND_COMMENT', 77014 );
+ define( 'PCLZIP_OPT_EXTRACT_IN_OUTPUT', 77015 );
+ define( 'PCLZIP_OPT_REPLACE_NEWER', 77016 );
+ define( 'PCLZIP_OPT_STOP_ON_ERROR', 77017 );
+ // Having big trouble with crypt. Need to multiply 2 long int
+ // which is not correctly supported by PHP ...
+ //define( 'PCLZIP_OPT_CRYPT', 77018 );
+ define( 'PCLZIP_OPT_EXTRACT_DIR_RESTRICTION', 77019 );
+
+ // ----- File description attributes
+ define( 'PCLZIP_ATT_FILE_NAME', 79001 );
+ define( 'PCLZIP_ATT_FILE_NEW_SHORT_NAME', 79002 );
+ define( 'PCLZIP_ATT_FILE_NEW_FULL_NAME', 79003 );
+
+ // ----- Call backs values
+ define( 'PCLZIP_CB_PRE_EXTRACT', 78001 );
+ define( 'PCLZIP_CB_POST_EXTRACT', 78002 );
+ define( 'PCLZIP_CB_PRE_ADD', 78003 );
+ define( 'PCLZIP_CB_POST_ADD', 78004 );
+ /* For futur use
+ define( 'PCLZIP_CB_PRE_LIST', 78005 );
+ define( 'PCLZIP_CB_POST_LIST', 78006 );
+ define( 'PCLZIP_CB_PRE_DELETE', 78007 );
+ define( 'PCLZIP_CB_POST_DELETE', 78008 );
+ */
+
+ // --------------------------------------------------------------------------------
+ // Class : PclZip
+ // Description :
+ // PclZip is the class that represent a Zip archive.
+ // The public methods allow the manipulation of the archive.
+ // Attributes :
+ // Attributes must not be accessed directly.
+ // Methods :
+ // PclZip() : Object creator
+ // create() : Creates the Zip archive
+ // listContent() : List the content of the Zip archive
+ // extract() : Extract the content of the archive
+ // properties() : List the properties of the archive
+ // --------------------------------------------------------------------------------
+ class PclZip
+ {
+ // ----- Filename of the zip file
+ var $zipname = '';
+
+ // ----- File descriptor of the zip file
+ var $zip_fd = 0;
+
+ // ----- Internal error handling
+ var $error_code = 1;
+ var $error_string = '';
+
+ // ----- Current status of the magic_quotes_runtime
+ // This value store the php configuration for magic_quotes
+ // The class can then disable the magic_quotes and reset it after
+ var $magic_quotes_status;
+
+ // --------------------------------------------------------------------------------
+ // Function : PclZip()
+ // Description :
+ // Creates a PclZip object and set the name of the associated Zip archive
+ // filename.
+ // Note that no real action is taken, if the archive does not exist it is not
+ // created. Use create() for that.
+ // --------------------------------------------------------------------------------
+ function PclZip($p_zipname)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::PclZip', "zipname=$p_zipname");
+
+ // ----- Tests the zlib
+ if (!function_exists('gzopen'))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 1, "zlib extension seems to be missing");
+ die('Abort '.basename(__FILE__).' : Missing zlib extensions');
+ }
+
+ // ----- Set the attributes
+ $this->zipname = $p_zipname;
+ $this->zip_fd = 0;
+ $this->magic_quotes_status = -1;
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 1);
+ return;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function :
+ // create($p_filelist, $p_add_dir="", $p_remove_dir="")
+ // create($p_filelist, $p_option, $p_option_value, ...)
+ // Description :
+ // This method supports two different synopsis. The first one is historical.
+ // This method creates a Zip Archive. The Zip file is created in the
+ // filesystem. The files and directories indicated in $p_filelist
+ // are added in the archive. See the parameters description for the
+ // supported format of $p_filelist.
+ // When a directory is in the list, the directory and its content is added
+ // in the archive.
+ // In this synopsis, the function takes an optional variable list of
+ // options. See bellow the supported options.
+ // Parameters :
+ // $p_filelist : An array containing file or directory names, or
+ // a string containing one filename or one directory name, or
+ // a string containing a list of filenames and/or directory
+ // names separated by spaces.
+ // $p_add_dir : A path to add before the real path of the archived file,
+ // in order to have it memorized in the archive.
+ // $p_remove_dir : A path to remove from the real path of the file to archive,
+ // in order to have a shorter path memorized in the archive.
+ // When $p_add_dir and $p_remove_dir are set, $p_remove_dir
+ // is removed first, before $p_add_dir is added.
+ // Options :
+ // PCLZIP_OPT_ADD_PATH :
+ // PCLZIP_OPT_REMOVE_PATH :
+ // PCLZIP_OPT_REMOVE_ALL_PATH :
+ // PCLZIP_OPT_COMMENT :
+ // PCLZIP_CB_PRE_ADD :
+ // PCLZIP_CB_POST_ADD :
+ // Return Values :
+ // 0 on failure,
+ // The list of the added files, with a status of the add action.
+ // (see PclZip::listContent() for list entry format)
+ // --------------------------------------------------------------------------------
+ function create($p_filelist)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::create', "filelist='$p_filelist', ...");
+ $v_result=1;
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Set default values
+ $v_options = array();
+ $v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE;
+
+ // ----- Look for variable options arguments
+ $v_size = func_num_args();
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "$v_size arguments passed to the method");
+
+ // ----- Look for arguments
+ if ($v_size > 1) {
+ // ----- Get the arguments
+ $v_arg_list = func_get_args();
+
+ // ----- Remove from the options list the first argument
+ array_shift($v_arg_list);
+ $v_size--;
+
+ // ----- Look for first arg
+ if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Variable list of options detected");
+
+ // ----- Parse the options
+ $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
+ array (PCLZIP_OPT_REMOVE_PATH => 'optional',
+ PCLZIP_OPT_REMOVE_ALL_PATH => 'optional',
+ PCLZIP_OPT_ADD_PATH => 'optional',
+ PCLZIP_CB_PRE_ADD => 'optional',
+ PCLZIP_CB_POST_ADD => 'optional',
+ PCLZIP_OPT_NO_COMPRESSION => 'optional',
+ PCLZIP_OPT_COMMENT => 'optional'
+ //, PCLZIP_OPT_CRYPT => 'optional'
+ ));
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+ }
+
+ // ----- Look for 2 args
+ // Here we need to support the first historic synopsis of the
+ // method.
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Static synopsis");
+
+ // ----- Get the first argument
+ $v_options[PCLZIP_OPT_ADD_PATH] = $v_arg_list[0];
+
+ // ----- Look for the optional second argument
+ if ($v_size == 2) {
+ $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1];
+ }
+ else if ($v_size > 2) {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER,
+ "Invalid number / type of arguments");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return 0;
+ }
+ }
+ }
+
+ // ----- Init
+ $v_string_list = array();
+ $v_att_list = array();
+ $v_filedescr_list = array();
+ $p_result_list = array();
+
+ // ----- Look if the $p_filelist is really an array
+ if (is_array($p_filelist)) {
+
+ // ----- Look if the first element is also an array
+ // This will mean that this is a file description entry
+ if (isset($p_filelist[0]) && is_array($p_filelist[0])) {
+ $v_att_list = $p_filelist;
+ }
+
+ // ----- The list is a list of string names
+ else {
+ $v_string_list = $p_filelist;
+ }
+ }
+
+ // ----- Look if the $p_filelist is a string
+ else if (is_string($p_filelist)) {
+ // ----- Create a list from the string
+ $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist);
+ }
+
+ // ----- Invalid variable type for $p_filelist
+ else {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_filelist");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+
+ // ----- Reformat the string list
+ if (sizeof($v_string_list) != 0) {
+ foreach ($v_string_list as $v_string) {
+ if ($v_string != '') {
+ $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string;
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Ignore an empty filename");
+ }
+ }
+ }
+
+ // ----- For each file in the list check the attributes
+ $v_supported_attributes
+ = array ( PCLZIP_ATT_FILE_NAME => 'mandatory'
+ ,PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'optional'
+ ,PCLZIP_ATT_FILE_NEW_FULL_NAME => 'optional'
+ );
+ foreach ($v_att_list as $v_entry) {
+ $v_result = $this->privFileDescrParseAtt($v_entry,
+ $v_filedescr_list[],
+ $v_options,
+ $v_supported_attributes);
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+ }
+
+ // ----- Expand the filelist (expand directories)
+ $v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options);
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+
+ // ----- Call the create fct
+ $v_result = $this->privCreate($v_filedescr_list, $p_result_list, $v_options);
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_result_list);
+ return $p_result_list;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function :
+ // add($p_filelist, $p_add_dir="", $p_remove_dir="")
+ // add($p_filelist, $p_option, $p_option_value, ...)
+ // Description :
+ // This method supports two synopsis. The first one is historical.
+ // This methods add the list of files in an existing archive.
+ // If a file with the same name already exists, it is added at the end of the
+ // archive, the first one is still present.
+ // If the archive does not exist, it is created.
+ // Parameters :
+ // $p_filelist : An array containing file or directory names, or
+ // a string containing one filename or one directory name, or
+ // a string containing a list of filenames and/or directory
+ // names separated by spaces.
+ // $p_add_dir : A path to add before the real path of the archived file,
+ // in order to have it memorized in the archive.
+ // $p_remove_dir : A path to remove from the real path of the file to archive,
+ // in order to have a shorter path memorized in the archive.
+ // When $p_add_dir and $p_remove_dir are set, $p_remove_dir
+ // is removed first, before $p_add_dir is added.
+ // Options :
+ // PCLZIP_OPT_ADD_PATH :
+ // PCLZIP_OPT_REMOVE_PATH :
+ // PCLZIP_OPT_REMOVE_ALL_PATH :
+ // PCLZIP_OPT_COMMENT :
+ // PCLZIP_OPT_ADD_COMMENT :
+ // PCLZIP_OPT_PREPEND_COMMENT :
+ // PCLZIP_CB_PRE_ADD :
+ // PCLZIP_CB_POST_ADD :
+ // Return Values :
+ // 0 on failure,
+ // The list of the added files, with a status of the add action.
+ // (see PclZip::listContent() for list entry format)
+ // --------------------------------------------------------------------------------
+ function add($p_filelist)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::add', "filelist='$p_filelist', ...");
+ $v_result=1;
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Set default values
+ $v_options = array();
+ $v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE;
+
+ // ----- Look for variable options arguments
+ $v_size = func_num_args();
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "$v_size arguments passed to the method");
+
+ // ----- Look for arguments
+ if ($v_size > 1) {
+ // ----- Get the arguments
+ $v_arg_list = func_get_args();
+
+ // ----- Remove form the options list the first argument
+ array_shift($v_arg_list);
+ $v_size--;
+
+ // ----- Look for first arg
+ if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Variable list of options detected");
+
+ // ----- Parse the options
+ $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
+ array (PCLZIP_OPT_REMOVE_PATH => 'optional',
+ PCLZIP_OPT_REMOVE_ALL_PATH => 'optional',
+ PCLZIP_OPT_ADD_PATH => 'optional',
+ PCLZIP_CB_PRE_ADD => 'optional',
+ PCLZIP_CB_POST_ADD => 'optional',
+ PCLZIP_OPT_NO_COMPRESSION => 'optional',
+ PCLZIP_OPT_COMMENT => 'optional',
+ PCLZIP_OPT_ADD_COMMENT => 'optional',
+ PCLZIP_OPT_PREPEND_COMMENT => 'optional'
+ //, PCLZIP_OPT_CRYPT => 'optional'
+ ));
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+ }
+
+ // ----- Look for 2 args
+ // Here we need to support the first historic synopsis of the
+ // method.
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Static synopsis");
+
+ // ----- Get the first argument
+ $v_options[PCLZIP_OPT_ADD_PATH] = $v_add_path = $v_arg_list[0];
+
+ // ----- Look for the optional second argument
+ if ($v_size == 2) {
+ $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1];
+ }
+ else if ($v_size > 2) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return 0;
+ }
+ }
+ }
+
+ // ----- Init
+ $v_string_list = array();
+ $v_att_list = array();
+ $v_filedescr_list = array();
+ $p_result_list = array();
+
+ // ----- Look if the $p_filelist is really an array
+ if (is_array($p_filelist)) {
+
+ // ----- Look if the first element is also an array
+ // This will mean that this is a file description entry
+ if (isset($p_filelist[0]) && is_array($p_filelist[0])) {
+ $v_att_list = $p_filelist;
+ }
+
+ // ----- The list is a list of string names
+ else {
+ $v_string_list = $p_filelist;
+ }
+ }
+
+ // ----- Look if the $p_filelist is a string
+ else if (is_string($p_filelist)) {
+ // ----- Create a list from the string
+ $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist);
+ }
+
+ // ----- Invalid variable type for $p_filelist
+ else {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type '".gettype($p_filelist)."' for p_filelist");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+
+ // ----- Reformat the string list
+ if (sizeof($v_string_list) != 0) {
+ foreach ($v_string_list as $v_string) {
+ $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string;
+ }
+ }
+
+ // ----- For each file in the list check the attributes
+ $v_supported_attributes
+ = array ( PCLZIP_ATT_FILE_NAME => 'mandatory'
+ ,PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'optional'
+ ,PCLZIP_ATT_FILE_NEW_FULL_NAME => 'optional'
+ );
+ foreach ($v_att_list as $v_entry) {
+ $v_result = $this->privFileDescrParseAtt($v_entry,
+ $v_filedescr_list[],
+ $v_options,
+ $v_supported_attributes);
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+ }
+
+ // ----- Expand the filelist (expand directories)
+ $v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options);
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+
+ // ----- Call the create fct
+ $v_result = $this->privAdd($v_filedescr_list, $p_result_list, $v_options);
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_result_list);
+ return $p_result_list;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : listContent()
+ // Description :
+ // This public method, gives the list of the files and directories, with their
+ // properties.
+ // The properties of each entries in the list are (used also in other functions) :
+ // filename : Name of the file. For a create or add action it is the filename
+ // given by the user. For an extract function it is the filename
+ // of the extracted file.
+ // stored_filename : Name of the file / directory stored in the archive.
+ // size : Size of the stored file.
+ // compressed_size : Size of the file's data compressed in the archive
+ // (without the headers overhead)
+ // mtime : Last known modification date of the file (UNIX timestamp)
+ // comment : Comment associated with the file
+ // folder : true | false
+ // index : index of the file in the archive
+ // status : status of the action (depending of the action) :
+ // Values are :
+ // ok : OK !
+ // filtered : the file / dir is not extracted (filtered by user)
+ // already_a_directory : the file can not be extracted because a
+ // directory with the same name already exists
+ // write_protected : the file can not be extracted because a file
+ // with the same name already exists and is
+ // write protected
+ // newer_exist : the file was not extracted because a newer file exists
+ // path_creation_fail : the file is not extracted because the folder
+ // does not exists and can not be created
+ // write_error : the file was not extracted because there was a
+ // error while writing the file
+ // read_error : the file was not extracted because there was a error
+ // while reading the file
+ // invalid_header : the file was not extracted because of an archive
+ // format error (bad file header)
+ // Note that each time a method can continue operating when there
+ // is an action error on a file, the error is only logged in the file status.
+ // Return Values :
+ // 0 on an unrecoverable failure,
+ // The list of the files in the archive.
+ // --------------------------------------------------------------------------------
+ function listContent()
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::listContent', "");
+ $v_result=1;
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Check archive
+ if (!$this->privCheckFormat()) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return(0);
+ }
+
+ // ----- Call the extracting fct
+ $p_list = array();
+ if (($v_result = $this->privList($p_list)) != 1)
+ {
+ unset($p_list);
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo());
+ return(0);
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_list);
+ return $p_list;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function :
+ // extract($p_path="./", $p_remove_path="")
+ // extract([$p_option, $p_option_value, ...])
+ // Description :
+ // This method supports two synopsis. The first one is historical.
+ // This method extract all the files / directories from the archive to the
+ // folder indicated in $p_path.
+ // If you want to ignore the 'root' part of path of the memorized files
+ // you can indicate this in the optional $p_remove_path parameter.
+ // By default, if a newer file with the same name already exists, the
+ // file is not extracted.
+ //
+ // If both PCLZIP_OPT_PATH and PCLZIP_OPT_ADD_PATH aoptions
+ // are used, the path indicated in PCLZIP_OPT_ADD_PATH is append
+ // at the end of the path value of PCLZIP_OPT_PATH.
+ // Parameters :
+ // $p_path : Path where the files and directories are to be extracted
+ // $p_remove_path : First part ('root' part) of the memorized path
+ // (if any similar) to remove while extracting.
+ // Options :
+ // PCLZIP_OPT_PATH :
+ // PCLZIP_OPT_ADD_PATH :
+ // PCLZIP_OPT_REMOVE_PATH :
+ // PCLZIP_OPT_REMOVE_ALL_PATH :
+ // PCLZIP_CB_PRE_EXTRACT :
+ // PCLZIP_CB_POST_EXTRACT :
+ // Return Values :
+ // 0 or a negative value on failure,
+ // The list of the extracted files, with a status of the action.
+ // (see PclZip::listContent() for list entry format)
+ // --------------------------------------------------------------------------------
+ function extract()
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::extract", "");
+ $v_result=1;
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Check archive
+ if (!$this->privCheckFormat()) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return(0);
+ }
+
+ // ----- Set default values
+ $v_options = array();
+// $v_path = "./";
+ $v_path = '';
+ $v_remove_path = "";
+ $v_remove_all_path = false;
+
+ // ----- Look for variable options arguments
+ $v_size = func_num_args();
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "$v_size arguments passed to the method");
+
+ // ----- Default values for option
+ $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE;
+
+ // ----- Look for arguments
+ if ($v_size > 0) {
+ // ----- Get the arguments
+ $v_arg_list = func_get_args();
+
+ // ----- Look for first arg
+ if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Variable list of options");
+
+ // ----- Parse the options
+ $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
+ array (PCLZIP_OPT_PATH => 'optional',
+ PCLZIP_OPT_REMOVE_PATH => 'optional',
+ PCLZIP_OPT_REMOVE_ALL_PATH => 'optional',
+ PCLZIP_OPT_ADD_PATH => 'optional',
+ PCLZIP_CB_PRE_EXTRACT => 'optional',
+ PCLZIP_CB_POST_EXTRACT => 'optional',
+ PCLZIP_OPT_SET_CHMOD => 'optional',
+ PCLZIP_OPT_BY_NAME => 'optional',
+ PCLZIP_OPT_BY_EREG => 'optional',
+ PCLZIP_OPT_BY_PREG => 'optional',
+ PCLZIP_OPT_BY_INDEX => 'optional',
+ PCLZIP_OPT_EXTRACT_AS_STRING => 'optional',
+ PCLZIP_OPT_EXTRACT_IN_OUTPUT => 'optional',
+ PCLZIP_OPT_REPLACE_NEWER => 'optional'
+ ,PCLZIP_OPT_STOP_ON_ERROR => 'optional'
+ ,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional'
+ ));
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+
+ // ----- Set the arguments
+ if (isset($v_options[PCLZIP_OPT_PATH])) {
+ $v_path = $v_options[PCLZIP_OPT_PATH];
+ }
+ if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) {
+ $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH];
+ }
+ if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) {
+ $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH];
+ }
+ if (isset($v_options[PCLZIP_OPT_ADD_PATH])) {
+ // ----- Check for '/' in last path char
+ if ((strlen($v_path) > 0) && (substr($v_path, -1) != '/')) {
+ $v_path .= '/';
+ }
+ $v_path .= $v_options[PCLZIP_OPT_ADD_PATH];
+ }
+ }
+
+ // ----- Look for 2 args
+ // Here we need to support the first historic synopsis of the
+ // method.
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Static synopsis");
+
+ // ----- Get the first argument
+ $v_path = $v_arg_list[0];
+
+ // ----- Look for the optional second argument
+ if ($v_size == 2) {
+ $v_remove_path = $v_arg_list[1];
+ }
+ else if ($v_size > 2) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo());
+ return 0;
+ }
+ }
+ }
+
+ // ----- Trace
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "path='$v_path', remove_path='$v_remove_path', remove_all_path='".($v_remove_path?'true':'false')."'");
+
+ // ----- Call the extracting fct
+ $p_list = array();
+ $v_result = $this->privExtractByRule($p_list, $v_path, $v_remove_path,
+ $v_remove_all_path, $v_options);
+ if ($v_result < 1) {
+ unset($p_list);
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo());
+ return(0);
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_list);
+ return $p_list;
+ }
+ // --------------------------------------------------------------------------------
+
+
+ // --------------------------------------------------------------------------------
+ // Function :
+ // extractByIndex($p_index, $p_path="./", $p_remove_path="")
+ // extractByIndex($p_index, [$p_option, $p_option_value, ...])
+ // Description :
+ // This method supports two synopsis. The first one is historical.
+ // This method is doing a partial extract of the archive.
+ // The extracted files or folders are identified by their index in the
+ // archive (from 0 to n).
+ // Note that if the index identify a folder, only the folder entry is
+ // extracted, not all the files included in the archive.
+ // Parameters :
+ // $p_index : A single index (integer) or a string of indexes of files to
+ // extract. The form of the string is "0,4-6,8-12" with only numbers
+ // and '-' for range or ',' to separate ranges. No spaces or ';'
+ // are allowed.
+ // $p_path : Path where the files and directories are to be extracted
+ // $p_remove_path : First part ('root' part) of the memorized path
+ // (if any similar) to remove while extracting.
+ // Options :
+ // PCLZIP_OPT_PATH :
+ // PCLZIP_OPT_ADD_PATH :
+ // PCLZIP_OPT_REMOVE_PATH :
+ // PCLZIP_OPT_REMOVE_ALL_PATH :
+ // PCLZIP_OPT_EXTRACT_AS_STRING : The files are extracted as strings and
+ // not as files.
+ // The resulting content is in a new field 'content' in the file
+ // structure.
+ // This option must be used alone (any other options are ignored).
+ // PCLZIP_CB_PRE_EXTRACT :
+ // PCLZIP_CB_POST_EXTRACT :
+ // Return Values :
+ // 0 on failure,
+ // The list of the extracted files, with a status of the action.
+ // (see PclZip::listContent() for list entry format)
+ // --------------------------------------------------------------------------------
+ //function extractByIndex($p_index, options...)
+ function extractByIndex($p_index)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::extractByIndex", "index='$p_index', ...");
+ $v_result=1;
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Check archive
+ if (!$this->privCheckFormat()) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return(0);
+ }
+
+ // ----- Set default values
+ $v_options = array();
+// $v_path = "./";
+ $v_path = '';
+ $v_remove_path = "";
+ $v_remove_all_path = false;
+
+ // ----- Look for variable options arguments
+ $v_size = func_num_args();
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "$v_size arguments passed to the method");
+
+ // ----- Default values for option
+ $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE;
+
+ // ----- Look for arguments
+ if ($v_size > 1) {
+ // ----- Get the arguments
+ $v_arg_list = func_get_args();
+
+ // ----- Remove form the options list the first argument
+ array_shift($v_arg_list);
+ $v_size--;
+
+ // ----- Look for first arg
+ if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Variable list of options");
+
+ // ----- Parse the options
+ $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
+ array (PCLZIP_OPT_PATH => 'optional',
+ PCLZIP_OPT_REMOVE_PATH => 'optional',
+ PCLZIP_OPT_REMOVE_ALL_PATH => 'optional',
+ PCLZIP_OPT_EXTRACT_AS_STRING => 'optional',
+ PCLZIP_OPT_ADD_PATH => 'optional',
+ PCLZIP_CB_PRE_EXTRACT => 'optional',
+ PCLZIP_CB_POST_EXTRACT => 'optional',
+ PCLZIP_OPT_SET_CHMOD => 'optional',
+ PCLZIP_OPT_REPLACE_NEWER => 'optional'
+ ,PCLZIP_OPT_STOP_ON_ERROR => 'optional'
+ ,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional'
+ ));
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+
+ // ----- Set the arguments
+ if (isset($v_options[PCLZIP_OPT_PATH])) {
+ $v_path = $v_options[PCLZIP_OPT_PATH];
+ }
+ if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) {
+ $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH];
+ }
+ if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) {
+ $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH];
+ }
+ if (isset($v_options[PCLZIP_OPT_ADD_PATH])) {
+ // ----- Check for '/' in last path char
+ if ((strlen($v_path) > 0) && (substr($v_path, -1) != '/')) {
+ $v_path .= '/';
+ }
+ $v_path .= $v_options[PCLZIP_OPT_ADD_PATH];
+ }
+ if (!isset($v_options[PCLZIP_OPT_EXTRACT_AS_STRING])) {
+ $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE;
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Option PCLZIP_OPT_EXTRACT_AS_STRING not set.");
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Option PCLZIP_OPT_EXTRACT_AS_STRING set.");
+ }
+ }
+
+ // ----- Look for 2 args
+ // Here we need to support the first historic synopsis of the
+ // method.
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Static synopsis");
+
+ // ----- Get the first argument
+ $v_path = $v_arg_list[0];
+
+ // ----- Look for the optional second argument
+ if ($v_size == 2) {
+ $v_remove_path = $v_arg_list[1];
+ }
+ else if ($v_size > 2) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return 0;
+ }
+ }
+ }
+
+ // ----- Trace
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "index='$p_index', path='$v_path', remove_path='$v_remove_path', remove_all_path='".($v_remove_path?'true':'false')."'");
+
+ // ----- Trick
+ // Here I want to reuse extractByRule(), so I need to parse the $p_index
+ // with privParseOptions()
+ $v_arg_trick = array (PCLZIP_OPT_BY_INDEX, $p_index);
+ $v_options_trick = array();
+ $v_result = $this->privParseOptions($v_arg_trick, sizeof($v_arg_trick), $v_options_trick,
+ array (PCLZIP_OPT_BY_INDEX => 'optional' ));
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+ $v_options[PCLZIP_OPT_BY_INDEX] = $v_options_trick[PCLZIP_OPT_BY_INDEX];
+
+ // ----- Call the extracting fct
+ if (($v_result = $this->privExtractByRule($p_list, $v_path, $v_remove_path, $v_remove_all_path, $v_options)) < 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo());
+ return(0);
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_list);
+ return $p_list;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function :
+ // delete([$p_option, $p_option_value, ...])
+ // Description :
+ // This method removes files from the archive.
+ // If no parameters are given, then all the archive is emptied.
+ // Parameters :
+ // None or optional arguments.
+ // Options :
+ // PCLZIP_OPT_BY_INDEX :
+ // PCLZIP_OPT_BY_NAME :
+ // PCLZIP_OPT_BY_EREG :
+ // PCLZIP_OPT_BY_PREG :
+ // Return Values :
+ // 0 on failure,
+ // The list of the files which are still present in the archive.
+ // (see PclZip::listContent() for list entry format)
+ // --------------------------------------------------------------------------------
+ function delete()
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::delete", "");
+ $v_result=1;
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Check archive
+ if (!$this->privCheckFormat()) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return(0);
+ }
+
+ // ----- Set default values
+ $v_options = array();
+
+ // ----- Look for variable options arguments
+ $v_size = func_num_args();
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "$v_size arguments passed to the method");
+
+ // ----- Look for arguments
+ if ($v_size > 0) {
+ // ----- Get the arguments
+ $v_arg_list = func_get_args();
+
+ // ----- Parse the options
+ $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
+ array (PCLZIP_OPT_BY_NAME => 'optional',
+ PCLZIP_OPT_BY_EREG => 'optional',
+ PCLZIP_OPT_BY_PREG => 'optional',
+ PCLZIP_OPT_BY_INDEX => 'optional' ));
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+ }
+
+ // ----- Magic quotes trick
+ $this->privDisableMagicQuotes();
+
+ // ----- Call the delete fct
+ $v_list = array();
+ if (($v_result = $this->privDeleteByRule($v_list, $v_options)) != 1) {
+ $this->privSwapBackMagicQuotes();
+ unset($v_list);
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo());
+ return(0);
+ }
+
+ // ----- Magic quotes trick
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_list);
+ return $v_list;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : deleteByIndex()
+ // Description :
+ // ***** Deprecated *****
+ // delete(PCLZIP_OPT_BY_INDEX, $p_index) should be prefered.
+ // --------------------------------------------------------------------------------
+ function deleteByIndex($p_index)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::deleteByIndex", "index='$p_index'");
+
+ $p_list = $this->delete(PCLZIP_OPT_BY_INDEX, $p_index);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_list);
+ return $p_list;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : properties()
+ // Description :
+ // This method gives the properties of the archive.
+ // The properties are :
+ // nb : Number of files in the archive
+ // comment : Comment associated with the archive file
+ // status : not_exist, ok
+ // Parameters :
+ // None
+ // Return Values :
+ // 0 on failure,
+ // An array with the archive properties.
+ // --------------------------------------------------------------------------------
+ function properties()
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::properties", "");
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Magic quotes trick
+ $this->privDisableMagicQuotes();
+
+ // ----- Check archive
+ if (!$this->privCheckFormat()) {
+ $this->privSwapBackMagicQuotes();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return(0);
+ }
+
+ // ----- Default properties
+ $v_prop = array();
+ $v_prop['comment'] = '';
+ $v_prop['nb'] = 0;
+ $v_prop['status'] = 'not_exist';
+
+ // ----- Look if file exists
+ if (@is_file($this->zipname))
+ {
+ // ----- Open the zip file
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode");
+ if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0)
+ {
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in binary read mode');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), 0);
+ return 0;
+ }
+
+ // ----- Read the central directory informations
+ $v_central_dir = array();
+ if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
+ {
+ $this->privSwapBackMagicQuotes();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+
+ // ----- Close the zip file
+ $this->privCloseFd();
+
+ // ----- Set the user attributes
+ $v_prop['comment'] = $v_central_dir['comment'];
+ $v_prop['nb'] = $v_central_dir['entries'];
+ $v_prop['status'] = 'ok';
+ }
+
+ // ----- Magic quotes trick
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_prop);
+ return $v_prop;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : duplicate()
+ // Description :
+ // This method creates an archive by copying the content of an other one. If
+ // the archive already exist, it is replaced by the new one without any warning.
+ // Parameters :
+ // $p_archive : The filename of a valid archive, or
+ // a valid PclZip object.
+ // Return Values :
+ // 1 on success.
+ // 0 or a negative value on error (error code).
+ // --------------------------------------------------------------------------------
+ function duplicate($p_archive)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::duplicate", "");
+ $v_result = 1;
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Look if the $p_archive is a PclZip object
+ if ((is_object($p_archive)) && (get_class($p_archive) == 'pclzip'))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "The parameter is valid PclZip object '".$p_archive->zipname."'");
+
+ // ----- Duplicate the archive
+ $v_result = $this->privDuplicate($p_archive->zipname);
+ }
+
+ // ----- Look if the $p_archive is a string (so a filename)
+ else if (is_string($p_archive))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "The parameter is a filename '$p_archive'");
+
+ // ----- Check that $p_archive is a valid zip file
+ // TBC : Should also check the archive format
+ if (!is_file($p_archive)) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "No file with filename '".$p_archive."'");
+ $v_result = PCLZIP_ERR_MISSING_FILE;
+ }
+ else {
+ // ----- Duplicate the archive
+ $v_result = $this->privDuplicate($p_archive);
+ }
+ }
+
+ // ----- Invalid variable
+ else
+ {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_archive_to_add");
+ $v_result = PCLZIP_ERR_INVALID_PARAMETER;
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : merge()
+ // Description :
+ // This method merge the $p_archive_to_add archive at the end of the current
+ // one ($this).
+ // If the archive ($this) does not exist, the merge becomes a duplicate.
+ // If the $p_archive_to_add archive does not exist, the merge is a success.
+ // Parameters :
+ // $p_archive_to_add : It can be directly the filename of a valid zip archive,
+ // or a PclZip object archive.
+ // Return Values :
+ // 1 on success,
+ // 0 or negative values on error (see below).
+ // --------------------------------------------------------------------------------
+ function merge($p_archive_to_add)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::merge", "");
+ $v_result = 1;
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Check archive
+ if (!$this->privCheckFormat()) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return(0);
+ }
+
+ // ----- Look if the $p_archive_to_add is a PclZip object
+ if ((is_object($p_archive_to_add)) && (get_class($p_archive_to_add) == 'pclzip'))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The parameter is valid PclZip object");
+
+ // ----- Merge the archive
+ $v_result = $this->privMerge($p_archive_to_add);
+ }
+
+ // ----- Look if the $p_archive_to_add is a string (so a filename)
+ else if (is_string($p_archive_to_add))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The parameter is a filename");
+
+ // ----- Create a temporary archive
+ $v_object_archive = new PclZip($p_archive_to_add);
+
+ // ----- Merge the archive
+ $v_result = $this->privMerge($v_object_archive);
+ }
+
+ // ----- Invalid variable
+ else
+ {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_archive_to_add");
+ $v_result = PCLZIP_ERR_INVALID_PARAMETER;
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+
+
+ // --------------------------------------------------------------------------------
+ // Function : errorCode()
+ // Description :
+ // Parameters :
+ // --------------------------------------------------------------------------------
+ function errorCode()
+ {
+ if (PCLZIP_ERROR_EXTERNAL == 1) {
+ return(PclErrorCode());
+ }
+ else {
+ return($this->error_code);
+ }
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : errorName()
+ // Description :
+ // Parameters :
+ // --------------------------------------------------------------------------------
+ function errorName($p_with_code=false)
+ {
+ $v_name = array ( PCLZIP_ERR_NO_ERROR => 'PCLZIP_ERR_NO_ERROR',
+ PCLZIP_ERR_WRITE_OPEN_FAIL => 'PCLZIP_ERR_WRITE_OPEN_FAIL',
+ PCLZIP_ERR_READ_OPEN_FAIL => 'PCLZIP_ERR_READ_OPEN_FAIL',
+ PCLZIP_ERR_INVALID_PARAMETER => 'PCLZIP_ERR_INVALID_PARAMETER',
+ PCLZIP_ERR_MISSING_FILE => 'PCLZIP_ERR_MISSING_FILE',
+ PCLZIP_ERR_FILENAME_TOO_LONG => 'PCLZIP_ERR_FILENAME_TOO_LONG',
+ PCLZIP_ERR_INVALID_ZIP => 'PCLZIP_ERR_INVALID_ZIP',
+ PCLZIP_ERR_BAD_EXTRACTED_FILE => 'PCLZIP_ERR_BAD_EXTRACTED_FILE',
+ PCLZIP_ERR_DIR_CREATE_FAIL => 'PCLZIP_ERR_DIR_CREATE_FAIL',
+ PCLZIP_ERR_BAD_EXTENSION => 'PCLZIP_ERR_BAD_EXTENSION',
+ PCLZIP_ERR_BAD_FORMAT => 'PCLZIP_ERR_BAD_FORMAT',
+ PCLZIP_ERR_DELETE_FILE_FAIL => 'PCLZIP_ERR_DELETE_FILE_FAIL',
+ PCLZIP_ERR_RENAME_FILE_FAIL => 'PCLZIP_ERR_RENAME_FILE_FAIL',
+ PCLZIP_ERR_BAD_CHECKSUM => 'PCLZIP_ERR_BAD_CHECKSUM',
+ PCLZIP_ERR_INVALID_ARCHIVE_ZIP => 'PCLZIP_ERR_INVALID_ARCHIVE_ZIP',
+ PCLZIP_ERR_MISSING_OPTION_VALUE => 'PCLZIP_ERR_MISSING_OPTION_VALUE',
+ PCLZIP_ERR_INVALID_OPTION_VALUE => 'PCLZIP_ERR_INVALID_OPTION_VALUE',
+ PCLZIP_ERR_UNSUPPORTED_COMPRESSION => 'PCLZIP_ERR_UNSUPPORTED_COMPRESSION',
+ PCLZIP_ERR_UNSUPPORTED_ENCRYPTION => 'PCLZIP_ERR_UNSUPPORTED_ENCRYPTION'
+ ,PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE => 'PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE'
+ ,PCLZIP_ERR_DIRECTORY_RESTRICTION => 'PCLZIP_ERR_DIRECTORY_RESTRICTION'
+ );
+
+ if (isset($v_name[$this->error_code])) {
+ $v_value = $v_name[$this->error_code];
+ }
+ else {
+ $v_value = 'NoName';
+ }
+
+ if ($p_with_code) {
+ return($v_value.' ('.$this->error_code.')');
+ }
+ else {
+ return($v_value);
+ }
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : errorInfo()
+ // Description :
+ // Parameters :
+ // --------------------------------------------------------------------------------
+ function errorInfo($p_full=false)
+ {
+ if (PCLZIP_ERROR_EXTERNAL == 1) {
+ return(PclErrorString());
+ }
+ else {
+ if ($p_full) {
+ return($this->errorName(true)." : ".$this->error_string);
+ }
+ else {
+ return($this->error_string." [code ".$this->error_code."]");
+ }
+ }
+ }
+ // --------------------------------------------------------------------------------
+
+
+// --------------------------------------------------------------------------------
+// ***** UNDER THIS LINE ARE DEFINED PRIVATE INTERNAL FUNCTIONS *****
+// ***** *****
+// ***** THESES FUNCTIONS MUST NOT BE USED DIRECTLY *****
+// --------------------------------------------------------------------------------
+
+
+
+ // --------------------------------------------------------------------------------
+ // Function : privCheckFormat()
+ // Description :
+ // This method check that the archive exists and is a valid zip archive.
+ // Several level of check exists. (futur)
+ // Parameters :
+ // $p_level : Level of check. Default 0.
+ // 0 : Check the first bytes (magic codes) (default value))
+ // 1 : 0 + Check the central directory (futur)
+ // 2 : 1 + Check each file header (futur)
+ // Return Values :
+ // true on success,
+ // false on error, the error code is set.
+ // --------------------------------------------------------------------------------
+ function privCheckFormat($p_level=0)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privCheckFormat", "");
+ $v_result = true;
+
+ // ----- Reset the file system cache
+ clearstatcache();
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Look if the file exits
+ if (!is_file($this->zipname)) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "Missing archive file '".$this->zipname."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, false, PclZip::errorInfo());
+ return(false);
+ }
+
+ // ----- Check that the file is readeable
+ if (!is_readable($this->zipname)) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to read archive '".$this->zipname."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, false, PclZip::errorInfo());
+ return(false);
+ }
+
+ // ----- Check the magic code
+ // TBC
+
+ // ----- Check the central header
+ // TBC
+
+ // ----- Check each file header
+ // TBC
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privParseOptions()
+ // Description :
+ // This internal methods reads the variable list of arguments ($p_options_list,
+ // $p_size) and generate an array with the options and values ($v_result_list).
+ // $v_requested_options contains the options that can be present and those that
+ // must be present.
+ // $v_requested_options is an array, with the option value as key, and 'optional',
+ // or 'mandatory' as value.
+ // Parameters :
+ // See above.
+ // Return Values :
+ // 1 on success.
+ // 0 on failure.
+ // --------------------------------------------------------------------------------
+ function privParseOptions(&$p_options_list, $p_size, &$v_result_list, $v_requested_options=false)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privParseOptions", "");
+ $v_result=1;
+
+ // ----- Read the options
+ $i=0;
+ while ($i<$p_size) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Looking for table index $i, option = '".PclZipUtilOptionText($p_options_list[$i])."(".$p_options_list[$i].")'");
+
+ // ----- Check if the option is supported
+ if (!isset($v_requested_options[$p_options_list[$i]])) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid optional parameter '".$p_options_list[$i]."' for this method");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Look for next option
+ switch ($p_options_list[$i]) {
+ // ----- Look for options that request a path value
+ case PCLZIP_OPT_PATH :
+ case PCLZIP_OPT_REMOVE_PATH :
+ case PCLZIP_OPT_ADD_PATH :
+ // ----- Check the number of parameters
+ if (($i+1) >= $p_size) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Get the value
+ $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], false);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'");
+ $i++;
+ break;
+
+ case PCLZIP_OPT_EXTRACT_DIR_RESTRICTION :
+ // ----- Check the number of parameters
+ if (($i+1) >= $p_size) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Get the value
+ if ( is_string($p_options_list[$i+1])
+ && ($p_options_list[$i+1] != '')) {
+ $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], false);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'");
+ $i++;
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." set with an empty value is ignored.");
+ }
+ break;
+
+ // ----- Look for options that request an array of string for value
+ case PCLZIP_OPT_BY_NAME :
+ // ----- Check the number of parameters
+ if (($i+1) >= $p_size) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Get the value
+ if (is_string($p_options_list[$i+1])) {
+ $v_result_list[$p_options_list[$i]][0] = $p_options_list[$i+1];
+ }
+ else if (is_array($p_options_list[$i+1])) {
+ $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
+ }
+ else {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ ////--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'");
+ $i++;
+ break;
+
+ // ----- Look for options that request an EREG or PREG expression
+ case PCLZIP_OPT_BY_EREG :
+ case PCLZIP_OPT_BY_PREG :
+ //case PCLZIP_OPT_CRYPT :
+ // ----- Check the number of parameters
+ if (($i+1) >= $p_size) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Get the value
+ if (is_string($p_options_list[$i+1])) {
+ $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
+ }
+ else {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'");
+ $i++;
+ break;
+
+ // ----- Look for options that takes a string
+ case PCLZIP_OPT_COMMENT :
+ case PCLZIP_OPT_ADD_COMMENT :
+ case PCLZIP_OPT_PREPEND_COMMENT :
+ // ----- Check the number of parameters
+ if (($i+1) >= $p_size) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE,
+ "Missing parameter value for option '"
+ .PclZipUtilOptionText($p_options_list[$i])
+ ."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Get the value
+ if (is_string($p_options_list[$i+1])) {
+ $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
+ }
+ else {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE,
+ "Wrong parameter value for option '"
+ .PclZipUtilOptionText($p_options_list[$i])
+ ."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'");
+ $i++;
+ break;
+
+ // ----- Look for options that request an array of index
+ case PCLZIP_OPT_BY_INDEX :
+ // ----- Check the number of parameters
+ if (($i+1) >= $p_size) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Get the value
+ $v_work_list = array();
+ if (is_string($p_options_list[$i+1])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Index value is a string '".$p_options_list[$i+1]."'");
+
+ // ----- Remove spaces
+ $p_options_list[$i+1] = strtr($p_options_list[$i+1], ' ', '');
+
+ // ----- Parse items
+ $v_work_list = explode(",", $p_options_list[$i+1]);
+ }
+ else if (is_integer($p_options_list[$i+1])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Index value is an integer '".$p_options_list[$i+1]."'");
+ $v_work_list[0] = $p_options_list[$i+1].'-'.$p_options_list[$i+1];
+ }
+ else if (is_array($p_options_list[$i+1])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Index value is an array");
+ $v_work_list = $p_options_list[$i+1];
+ }
+ else {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Value must be integer, string or array for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Reduce the index list
+ // each index item in the list must be a couple with a start and
+ // an end value : [0,3], [5-5], [8-10], ...
+ // ----- Check the format of each item
+ $v_sort_flag=false;
+ $v_sort_value=0;
+ for ($j=0; $j<sizeof($v_work_list); $j++) {
+ // ----- Explode the item
+ $v_item_list = explode("-", $v_work_list[$j]);
+ $v_size_item_list = sizeof($v_item_list);
+
+ // ----- TBC : Here we might check that each item is a
+ // real integer ...
+
+ // ----- Look for single value
+ if ($v_size_item_list == 1) {
+ // ----- Set the option value
+ $v_result_list[$p_options_list[$i]][$j]['start'] = $v_item_list[0];
+ $v_result_list[$p_options_list[$i]][$j]['end'] = $v_item_list[0];
+ }
+ elseif ($v_size_item_list == 2) {
+ // ----- Set the option value
+ $v_result_list[$p_options_list[$i]][$j]['start'] = $v_item_list[0];
+ $v_result_list[$p_options_list[$i]][$j]['end'] = $v_item_list[1];
+ }
+ else {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Too many values in index range for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extracted index item = [".$v_result_list[$p_options_list[$i]][$j]['start'].",".$v_result_list[$p_options_list[$i]][$j]['end']."]");
+
+ // ----- Look for list sort
+ if ($v_result_list[$p_options_list[$i]][$j]['start'] < $v_sort_value) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The list should be sorted ...");
+ $v_sort_flag=true;
+
+ // ----- TBC : An automatic sort should be writen ...
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Invalid order of index range for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ $v_sort_value = $v_result_list[$p_options_list[$i]][$j]['start'];
+ }
+
+ // ----- Sort the items
+ if ($v_sort_flag) {
+ // TBC : To Be Completed
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "List sorting is not yet write ...");
+ }
+
+ // ----- Next option
+ $i++;
+ break;
+
+ // ----- Look for options that request no value
+ case PCLZIP_OPT_REMOVE_ALL_PATH :
+ case PCLZIP_OPT_EXTRACT_AS_STRING :
+ case PCLZIP_OPT_NO_COMPRESSION :
+ case PCLZIP_OPT_EXTRACT_IN_OUTPUT :
+ case PCLZIP_OPT_REPLACE_NEWER :
+ case PCLZIP_OPT_STOP_ON_ERROR :
+ $v_result_list[$p_options_list[$i]] = true;
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'");
+ break;
+
+ // ----- Look for options that request an octal value
+ case PCLZIP_OPT_SET_CHMOD :
+ // ----- Check the number of parameters
+ if (($i+1) >= $p_size) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Get the value
+ $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'");
+ $i++;
+ break;
+
+ // ----- Look for options that request a call-back
+ case PCLZIP_CB_PRE_EXTRACT :
+ case PCLZIP_CB_POST_EXTRACT :
+ case PCLZIP_CB_PRE_ADD :
+ case PCLZIP_CB_POST_ADD :
+ /* for futur use
+ case PCLZIP_CB_PRE_DELETE :
+ case PCLZIP_CB_POST_DELETE :
+ case PCLZIP_CB_PRE_LIST :
+ case PCLZIP_CB_POST_LIST :
+ */
+ // ----- Check the number of parameters
+ if (($i+1) >= $p_size) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Get the value
+ $v_function_name = $p_options_list[$i+1];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "call-back ".PclZipUtilOptionText($p_options_list[$i])." = '".$v_function_name."'");
+
+ // ----- Check that the value is a valid existing function
+ if (!function_exists($v_function_name)) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Function '".$v_function_name."()' is not an existing function for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Set the attribute
+ $v_result_list[$p_options_list[$i]] = $v_function_name;
+ $i++;
+ break;
+
+ default :
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER,
+ "Unknown parameter '"
+ .$p_options_list[$i]."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Next options
+ $i++;
+ }
+
+ // ----- Look for mandatory options
+ if ($v_requested_options !== false) {
+ for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) {
+ // ----- Look for mandatory option
+ if ($v_requested_options[$key] == 'mandatory') {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Detect a mandatory option : ".PclZipUtilOptionText($key)."(".$key.")");
+ // ----- Look if present
+ if (!isset($v_result_list[$key])) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter ".PclZipUtilOptionText($key)."(".$key.")");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ }
+ }
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privFileDescrParseAtt()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // 1 on success.
+ // 0 on failure.
+ // --------------------------------------------------------------------------------
+ function privFileDescrParseAtt(&$p_file_list, &$p_filedescr, $v_options, $v_requested_options=false)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privFileDescrParseAtt", "");
+ $v_result=1;
+
+ // ----- For each file in the list check the attributes
+ foreach ($p_file_list as $v_key => $v_value) {
+
+ // ----- Check if the option is supported
+ if (!isset($v_requested_options[$v_key])) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid file attribute '".$v_key."' for this file");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Look for attribute
+ switch ($v_key) {
+ case PCLZIP_ATT_FILE_NAME :
+ if (!is_string($v_value)) {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ $p_filedescr['filename'] = PclZipUtilPathReduction($v_value);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($v_key)." = '".$v_value."'");
+
+ if ($p_filedescr['filename'] == '') {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty filename for attribute '".PclZipUtilOptionText($v_key)."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ break;
+
+ case PCLZIP_ATT_FILE_NEW_SHORT_NAME :
+ if (!is_string($v_value)) {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ $p_filedescr['new_short_name'] = PclZipUtilPathReduction($v_value);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($v_key)." = '".$v_value."'");
+
+ if ($p_filedescr['new_short_name'] == '') {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty short filename for attribute '".PclZipUtilOptionText($v_key)."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ break;
+
+ case PCLZIP_ATT_FILE_NEW_FULL_NAME :
+ if (!is_string($v_value)) {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ $p_filedescr['new_full_name'] = PclZipUtilPathReduction($v_value);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($v_key)." = '".$v_value."'");
+
+ if ($p_filedescr['new_full_name'] == '') {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty full filename for attribute '".PclZipUtilOptionText($v_key)."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ break;
+
+ default :
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER,
+ "Unknown parameter '".$v_key."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Look for mandatory options
+ if ($v_requested_options !== false) {
+ for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) {
+ // ----- Look for mandatory option
+ if ($v_requested_options[$key] == 'mandatory') {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Detect a mandatory option : ".PclZipUtilOptionText($key)."(".$key.")");
+ // ----- Look if present
+ if (!isset($p_file_list[$key])) {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter ".PclZipUtilOptionText($key)."(".$key.")");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ }
+ }
+ }
+
+ // end foreach
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privFileDescrExpand()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // 1 on success.
+ // 0 on failure.
+ // --------------------------------------------------------------------------------
+ function privFileDescrExpand(&$p_filedescr_list, &$p_options)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privFileDescrExpand", "");
+ $v_result=1;
+
+ // ----- Create a result list
+ $v_result_list = array();
+
+ // ----- Look each entry
+ for ($i=0; $i<sizeof($p_filedescr_list); $i++) {
+ // ----- Get filedescr
+ $v_descr = $p_filedescr_list[$i];
+
+ // ----- Reduce the filename
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Filedescr before reduction :'".$v_descr['filename']."'");
+ $v_descr['filename'] = PclZipUtilTranslateWinPath($v_descr['filename']);
+ $v_descr['filename'] = PclZipUtilPathReduction($v_descr['filename']);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Filedescr after reduction :'".$v_descr['filename']."'");
+
+ // ----- Get type of descr
+ if (!file_exists($v_descr['filename'])) {
+ // ----- Error log
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File '".$v_descr['filename']."' does not exists");
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "File '".$v_descr['filename']."' does not exists");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ if (@is_file($v_descr['filename'])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "This is a file");
+ $v_descr['type'] = 'file';
+ }
+ else if (@is_dir($v_descr['filename'])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "This is a folder");
+ $v_descr['type'] = 'folder';
+ }
+ else if (@is_link($v_descr['filename'])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Unsupported file type : link");
+ // skip
+ continue;
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Unsupported file type : unknown type");
+ // skip
+ continue;
+ }
+
+ // ----- Calculate the stored filename
+ $this->privCalculateStoredFilename($v_descr, $p_options);
+
+ // ----- Add the descriptor in result list
+ $v_result_list[sizeof($v_result_list)] = $v_descr;
+
+ // ----- Look for folder
+ if ($v_descr['type'] == 'folder') {
+ // ----- List of items in folder
+ $v_dirlist_descr = array();
+ $v_dirlist_nb = 0;
+ if ($v_folder_handler = @opendir($v_descr['filename'])) {
+ while (($v_item_handler = @readdir($v_folder_handler)) !== false) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Looking for '".$v_item_handler."' in the directory");
+
+ // ----- Skip '.' and '..'
+ if (($v_item_handler == '.') || ($v_item_handler == '..')) {
+ continue;
+ }
+
+ // ----- Compose the full filename
+ $v_dirlist_descr[$v_dirlist_nb]['filename'] = $v_descr['filename'].'/'.$v_item_handler;
+
+ // ----- Look for different stored filename
+ // Because the name of the folder was changed, the name of the
+ // files/sub-folders also change
+ if ($v_descr['stored_filename'] != $v_descr['filename']) {
+ $v_dirlist_descr[$v_dirlist_nb]['new_full_name'] = $v_descr['stored_filename'].'/'.$v_item_handler;
+ }
+
+ $v_dirlist_nb++;
+ }
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Unable to open dir '".$v_descr['filename']."' in read mode. Skipped.");
+ // TBC : unable to open folder in read mode
+ }
+
+ // ----- Expand each element of the list
+ if ($v_dirlist_nb != 0) {
+ // ----- Expand
+ if (($v_result = $this->privFileDescrExpand($v_dirlist_descr, $p_options)) != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Concat the resulting list
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Merging result list (size '".sizeof($v_result_list)."') with dirlist (size '".sizeof($v_dirlist_descr)."')");
+ $v_result_list = array_merge($v_result_list, $v_dirlist_descr);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "merged result list is size '".sizeof($v_result_list)."'");
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Nothing in this folder to expand.");
+ }
+
+ // ----- Free local array
+ unset($v_dirlist_descr);
+ }
+ }
+
+ // ----- Get the result list
+ $p_filedescr_list = $v_result_list;
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privCreate()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privCreate($p_filedescr_list, &$p_result_list, &$p_options)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privCreate", "list");
+ $v_result=1;
+ $v_list_detail = array();
+
+ // ----- Magic quotes trick
+ $this->privDisableMagicQuotes();
+
+ // ----- Open the file in write mode
+ if (($v_result = $this->privOpenFd('wb')) != 1)
+ {
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Add the list of files
+ $v_result = $this->privAddList($p_filedescr_list, $p_result_list, $p_options);
+
+ // ----- Close
+ $this->privCloseFd();
+
+ // ----- Magic quotes trick
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privAdd()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privAdd($p_filedescr_list, &$p_result_list, &$p_options)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privAdd", "list");
+ $v_result=1;
+ $v_list_detail = array();
+
+ // ----- Look if the archive exists or is empty
+ if ((!is_file($this->zipname)) || (filesize($this->zipname) == 0))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Archive does not exist, or is empty, create it.");
+
+ // ----- Do a create
+ $v_result = $this->privCreate($p_filedescr_list, $p_result_list, $p_options);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // ----- Magic quotes trick
+ $this->privDisableMagicQuotes();
+
+ // ----- Open the zip file
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode");
+ if (($v_result=$this->privOpenFd('rb')) != 1)
+ {
+ // ----- Magic quotes trick
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Read the central directory informations
+ $v_central_dir = array();
+ if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
+ {
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Go to beginning of File
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in file : ".ftell($this->zip_fd)."'");
+ @rewind($this->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in file : ".ftell($this->zip_fd)."'");
+
+ // ----- Creates a temporay file
+ $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp';
+
+ // ----- Open the temporary file in write mode
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode");
+ if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0)
+ {
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Copy the files from the archive to the temporary file
+ // TBC : Here I should better append the file and go back to erase the central dir
+ $v_size = $v_central_dir['offset'];
+ while ($v_size != 0)
+ {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes");
+ $v_buffer = fread($this->zip_fd, $v_read_size);
+ @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+
+ // ----- Swap the file descriptor
+ // Here is a trick : I swap the temporary fd with the zip fd, in order to use
+ // the following methods on the temporary fil and not the real archive
+ $v_swap = $this->zip_fd;
+ $this->zip_fd = $v_zip_temp_fd;
+ $v_zip_temp_fd = $v_swap;
+
+ // ----- Add the files
+ $v_header_list = array();
+ if (($v_result = $this->privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1)
+ {
+ fclose($v_zip_temp_fd);
+ $this->privCloseFd();
+ @unlink($v_zip_temp_name);
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Store the offset of the central dir
+ $v_offset = @ftell($this->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "New offset of central dir : $v_offset");
+
+ // ----- Copy the block of file headers from the old archive
+ $v_size = $v_central_dir['size'];
+ while ($v_size != 0)
+ {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes");
+ $v_buffer = @fread($v_zip_temp_fd, $v_read_size);
+ @fwrite($this->zip_fd, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+
+ // ----- Create the Central Dir files header
+ for ($i=0, $v_count=0; $i<sizeof($v_header_list); $i++)
+ {
+ // ----- Create the file header
+ if ($v_header_list[$i]['status'] == 'ok') {
+ if (($v_result = $this->privWriteCentralFileHeader($v_header_list[$i])) != 1) {
+ fclose($v_zip_temp_fd);
+ $this->privCloseFd();
+ @unlink($v_zip_temp_name);
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ $v_count++;
+ }
+
+ // ----- Transform the header to a 'usable' info
+ $this->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]);
+ }
+
+ // ----- Zip file comment
+ $v_comment = $v_central_dir['comment'];
+ if (isset($p_options[PCLZIP_OPT_COMMENT])) {
+ $v_comment = $p_options[PCLZIP_OPT_COMMENT];
+ }
+ if (isset($p_options[PCLZIP_OPT_ADD_COMMENT])) {
+ $v_comment = $v_comment.$p_options[PCLZIP_OPT_ADD_COMMENT];
+ }
+ if (isset($p_options[PCLZIP_OPT_PREPEND_COMMENT])) {
+ $v_comment = $p_options[PCLZIP_OPT_PREPEND_COMMENT].$v_comment;
+ }
+
+ // ----- Calculate the size of the central header
+ $v_size = @ftell($this->zip_fd)-$v_offset;
+
+ // ----- Create the central dir footer
+ if (($v_result = $this->privWriteCentralHeader($v_count+$v_central_dir['entries'], $v_size, $v_offset, $v_comment)) != 1)
+ {
+ // ----- Reset the file list
+ unset($v_header_list);
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Swap back the file descriptor
+ $v_swap = $this->zip_fd;
+ $this->zip_fd = $v_zip_temp_fd;
+ $v_zip_temp_fd = $v_swap;
+
+ // ----- Close
+ $this->privCloseFd();
+
+ // ----- Close the temporary file
+ @fclose($v_zip_temp_fd);
+
+ // ----- Magic quotes trick
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Delete the zip file
+ // TBC : I should test the result ...
+ @unlink($this->zipname);
+
+ // ----- Rename the temporary file
+ // TBC : I should test the result ...
+ //@rename($v_zip_temp_name, $this->zipname);
+ PclZipUtilRename($v_zip_temp_name, $this->zipname);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privOpenFd()
+ // Description :
+ // Parameters :
+ // --------------------------------------------------------------------------------
+ function privOpenFd($p_mode)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privOpenFd", 'mode='.$p_mode);
+ $v_result=1;
+
+ // ----- Look if already open
+ if ($this->zip_fd != 0)
+ {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Zip file \''.$this->zipname.'\' already open');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Open the zip file
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Open file in '.$p_mode.' mode');
+ if (($this->zip_fd = @fopen($this->zipname, $p_mode)) == 0)
+ {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in '.$p_mode.' mode');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privCloseFd()
+ // Description :
+ // Parameters :
+ // --------------------------------------------------------------------------------
+ function privCloseFd()
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privCloseFd", "");
+ $v_result=1;
+
+ if ($this->zip_fd != 0)
+ @fclose($this->zip_fd);
+ $this->zip_fd = 0;
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privAddList()
+ // Description :
+ // $p_add_dir and $p_remove_dir will give the ability to memorize a path which is
+ // different from the real path of the file. This is usefull if you want to have PclTar
+ // running in any directory, and memorize relative path from an other directory.
+ // Parameters :
+ // $p_list : An array containing the file or directory names to add in the tar
+ // $p_result_list : list of added files with their properties (specially the status field)
+ // $p_add_dir : Path to add in the filename path archived
+ // $p_remove_dir : Path to remove in the filename path archived
+ // Return Values :
+ // --------------------------------------------------------------------------------
+// function privAddList($p_list, &$p_result_list, $p_add_dir, $p_remove_dir, $p_remove_all_dir, &$p_options)
+ function privAddList($p_filedescr_list, &$p_result_list, &$p_options)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privAddList", "list");
+ $v_result=1;
+
+ // ----- Add the files
+ $v_header_list = array();
+ if (($v_result = $this->privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1)
+ {
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Store the offset of the central dir
+ $v_offset = @ftell($this->zip_fd);
+
+ // ----- Create the Central Dir files header
+ for ($i=0,$v_count=0; $i<sizeof($v_header_list); $i++)
+ {
+ // ----- Create the file header
+ if ($v_header_list[$i]['status'] == 'ok') {
+ if (($v_result = $this->privWriteCentralFileHeader($v_header_list[$i])) != 1) {
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ $v_count++;
+ }
+
+ // ----- Transform the header to a 'usable' info
+ $this->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]);
+ }
+
+ // ----- Zip file comment
+ $v_comment = '';
+ if (isset($p_options[PCLZIP_OPT_COMMENT])) {
+ $v_comment = $p_options[PCLZIP_OPT_COMMENT];
+ }
+
+ // ----- Calculate the size of the central header
+ $v_size = @ftell($this->zip_fd)-$v_offset;
+
+ // ----- Create the central dir footer
+ if (($v_result = $this->privWriteCentralHeader($v_count, $v_size, $v_offset, $v_comment)) != 1)
+ {
+ // ----- Reset the file list
+ unset($v_header_list);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privAddFileList()
+ // Description :
+ // Parameters :
+ // $p_filedescr_list : An array containing the file description
+ // or directory names to add in the zip
+ // $p_result_list : list of added files with their properties (specially the status field)
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privAddFileList($p_filedescr_list, &$p_result_list, &$p_options)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privAddFileList", "filedescr_list");
+ $v_result=1;
+ $v_header = array();
+
+ // ----- Recuperate the current number of elt in list
+ $v_nb = sizeof($p_result_list);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Before add, list have ".$v_nb." elements");
+
+ // ----- Loop on the files
+ for ($j=0; ($j<sizeof($p_filedescr_list)) && ($v_result==1); $j++) {
+ // ----- Format the filename
+ $p_filedescr_list[$j]['filename']
+ = PclZipUtilTranslateWinPath($p_filedescr_list[$j]['filename'], false);
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Looking for file '".$p_filedescr_list[$j]['filename']."'");
+
+ // ----- Skip empty file names
+ // TBC : Can this be possible ? not checked in DescrParseAtt ?
+ if ($p_filedescr_list[$j]['filename'] == "") {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Skip empty filename");
+ continue;
+ }
+
+ // ----- Check the filename
+ if (!file_exists($p_filedescr_list[$j]['filename'])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File '".$p_filedescr_list[$j]['filename']."' does not exists");
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "File '".$p_filedescr_list[$j]['filename']."' does not exists");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Look if it is a file or a dir with no all path remove option
+ if ( (is_file($p_filedescr_list[$j]['filename']))
+ || ( is_dir($p_filedescr_list[$j]['filename'])
+ && ( !isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH])
+ || !$p_options[PCLZIP_OPT_REMOVE_ALL_PATH]))) {
+
+ // ----- Add the file
+ $v_result = $this->privAddFile($p_filedescr_list[$j], $v_header,
+ $p_options);
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Store the file infos
+ $p_result_list[$v_nb++] = $v_header;
+ }
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "After add, list have ".$v_nb." elements");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privAddFile()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privAddFile($p_filedescr, &$p_header, &$p_options)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privAddFile", "filename='".$p_filedescr['filename']."'");
+ $v_result=1;
+
+ // ----- Working variable
+ $p_filename = $p_filedescr['filename'];
+
+ // TBC : Already done in the fileAtt check ... ?
+ if ($p_filename == "") {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid file list parameter (invalid or empty list)");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Look for a stored different filename
+ if (isset($p_filedescr['stored_filename'])) {
+ $v_stored_filename = $p_filedescr['stored_filename'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, 'Stored filename is NOT the same "'.$v_stored_filename.'"');
+ }
+ else {
+ $v_stored_filename = $p_filedescr['stored_filename'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, 'Stored filename is the same');
+ }
+
+ // ----- Set the file properties
+ clearstatcache();
+ $p_header['version'] = 20;
+ $p_header['version_extracted'] = 10;
+ $p_header['flag'] = 0;
+ $p_header['compression'] = 0;
+ $p_header['mtime'] = filemtime($p_filename);
+ $p_header['crc'] = 0;
+ $p_header['compressed_size'] = 0;
+ $p_header['size'] = filesize($p_filename);
+ $p_header['filename_len'] = strlen($p_filename);
+ $p_header['extra_len'] = 0;
+ $p_header['comment_len'] = 0;
+ $p_header['disk'] = 0;
+ $p_header['internal'] = 0;
+// $p_header['external'] = (is_file($p_filename)?0xFE49FFE0:0x41FF0010);
+ $p_header['external'] = (is_file($p_filename)?0x00000000:0x00000010);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Header external extension '".sprintf("0x%X",$p_header['external'])."'");
+ $p_header['offset'] = 0;
+ $p_header['filename'] = $p_filename;
+ $p_header['stored_filename'] = $v_stored_filename;
+ $p_header['extra'] = '';
+ $p_header['comment'] = '';
+ $p_header['status'] = 'ok';
+ $p_header['index'] = -1;
+
+ // ----- Look for pre-add callback
+ if (isset($p_options[PCLZIP_CB_PRE_ADD])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "A pre-callback '".$p_options[PCLZIP_CB_PRE_ADD]."()') is defined for the extraction");
+
+ // ----- Generate a local information
+ $v_local_header = array();
+ $this->privConvertHeader2FileInfo($p_header, $v_local_header);
+
+ // ----- Call the callback
+ // Here I do not use call_user_func() because I need to send a reference to the
+ // header.
+ eval('$v_result = '.$p_options[PCLZIP_CB_PRE_ADD].'(PCLZIP_CB_PRE_ADD, $v_local_header);');
+ if ($v_result == 0) {
+ // ----- Change the file status
+ $p_header['status'] = "skipped";
+ $v_result = 1;
+ }
+
+ // ----- Update the informations
+ // Only some fields can be modified
+ if ($p_header['stored_filename'] != $v_local_header['stored_filename']) {
+ $p_header['stored_filename'] = PclZipUtilPathReduction($v_local_header['stored_filename']);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "New stored filename is '".$p_header['stored_filename']."'");
+ }
+ }
+
+ // ----- Look for empty stored filename
+ if ($p_header['stored_filename'] == "") {
+ $p_header['status'] = "filtered";
+ }
+
+ // ----- Check the path length
+ if (strlen($p_header['stored_filename']) > 0xFF) {
+ $p_header['status'] = 'filename_too_long';
+ }
+
+ // ----- Look if no error, or file not skipped
+ if ($p_header['status'] == 'ok') {
+
+ // ----- Look for a file
+ if (is_file($p_filename))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "'".$p_filename."' is a file");
+ // ----- Open the source file
+ if (($v_file = @fopen($p_filename, "rb")) == 0) {
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to open file '$p_filename' in binary read mode");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ if ($p_options[PCLZIP_OPT_NO_COMPRESSION]) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File will not be compressed");
+ // ----- Read the file content
+ $v_content_compressed = @fread($v_file, $p_header['size']);
+
+ // ----- Calculate the CRC
+ $p_header['crc'] = @crc32($v_content_compressed);
+
+ // ----- Set header parameters
+ $p_header['compressed_size'] = $p_header['size'];
+ $p_header['compression'] = 0;
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File will be compressed");
+ // ----- Read the file content
+ $v_content = @fread($v_file, $p_header['size']);
+
+ // ----- Calculate the CRC
+ $p_header['crc'] = @crc32($v_content);
+
+ // ----- Compress the file
+ $v_content_compressed = @gzdeflate($v_content);
+
+ // ----- Set header parameters
+ $p_header['compressed_size'] = strlen($v_content_compressed);
+ $p_header['compression'] = 8;
+ }
+
+ // ----- Look for encryption
+ /*
+ if ((isset($p_options[PCLZIP_OPT_CRYPT]))
+ && ($p_options[PCLZIP_OPT_CRYPT] != "")) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File need to be crypted ....");
+
+ // Should be a random header
+ $v_header = 'xxxxxxxxxxxx';
+ $v_content_compressed = PclZipUtilZipEncrypt($v_content_compressed,
+ $p_header['compressed_size'],
+ $v_header,
+ $p_header['crc'],
+ "test");
+
+ $p_header['compressed_size'] += 12;
+ $p_header['flag'] = 1;
+
+ // ----- Add the header to the data
+ $v_content_compressed = $v_header.$v_content_compressed;
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Size after header : ".strlen($v_content_compressed)."");
+ }
+ */
+
+ // ----- Call the header generation
+ if (($v_result = $this->privWriteFileHeader($p_header)) != 1) {
+ @fclose($v_file);
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Write the compressed (or not) content
+ @fwrite($this->zip_fd,
+ $v_content_compressed, $p_header['compressed_size']);
+
+ // ----- Close the file
+ @fclose($v_file);
+ }
+
+ // ----- Look for a directory
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "'".$p_filename."' is a folder");
+ // ----- Look for directory last '/'
+ if (@substr($p_header['stored_filename'], -1) != '/') {
+ $p_header['stored_filename'] .= '/';
+ }
+
+ // ----- Set the file properties
+ $p_header['size'] = 0;
+ //$p_header['external'] = 0x41FF0010; // Value for a folder : to be checked
+ $p_header['external'] = 0x00000010; // Value for a folder : to be checked
+
+ // ----- Call the header generation
+ if (($v_result = $this->privWriteFileHeader($p_header)) != 1)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ }
+ }
+
+ // ----- Look for post-add callback
+ if (isset($p_options[PCLZIP_CB_POST_ADD])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "A post-callback '".$p_options[PCLZIP_CB_POST_ADD]."()') is defined for the extraction");
+
+ // ----- Generate a local information
+ $v_local_header = array();
+ $this->privConvertHeader2FileInfo($p_header, $v_local_header);
+
+ // ----- Call the callback
+ // Here I do not use call_user_func() because I need to send a reference to the
+ // header.
+ eval('$v_result = '.$p_options[PCLZIP_CB_POST_ADD].'(PCLZIP_CB_POST_ADD, $v_local_header);');
+ if ($v_result == 0) {
+ // ----- Ignored
+ $v_result = 1;
+ }
+
+ // ----- Update the informations
+ // Nothing can be modified
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privCalculateStoredFilename()
+ // Description :
+ // Based on file descriptor properties and global options, this method
+ // calculate the filename that will be stored in the archive.
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privCalculateStoredFilename(&$p_filedescr, &$p_options)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privCalculateStoredFilename", "filename='".$p_filedescr['filename']."'");
+ $v_result=1;
+
+ // ----- Working variables
+ $p_filename = $p_filedescr['filename'];
+ if (isset($p_options[PCLZIP_OPT_ADD_PATH])) {
+ $p_add_dir = $p_options[PCLZIP_OPT_ADD_PATH];
+ }
+ else {
+ $p_add_dir = '';
+ }
+ if (isset($p_options[PCLZIP_OPT_REMOVE_PATH])) {
+ $p_remove_dir = $p_options[PCLZIP_OPT_REMOVE_PATH];
+ }
+ else {
+ $p_remove_dir = '';
+ }
+ if (isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH])) {
+ $p_remove_all_dir = $p_options[PCLZIP_OPT_REMOVE_ALL_PATH];
+ }
+ else {
+ $p_remove_all_dir = 0;
+ }
+
+ // ----- Look for full name change
+ if (isset($p_filedescr['new_full_name'])) {
+ $v_stored_filename = $p_filedescr['new_full_name'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Changing full name of '".$p_filename."' for '".$v_stored_filename."'");
+ }
+
+ // ----- Look for path and/or short name change
+ else {
+
+ // ----- Look for short name change
+ if (isset($p_filedescr['new_short_name'])) {
+ $v_path_info = pathinfo($p_filename);
+ $v_dir = '';
+ if ($v_path_info['dirname'] != '') {
+ $v_dir = $v_path_info['dirname'].'/';
+ }
+ $v_stored_filename = $v_dir.$p_filedescr['new_short_name'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Changing short name of '".$p_filename."' for '".$v_stored_filename."'");
+ }
+ else {
+ // ----- Calculate the stored filename
+ $v_stored_filename = $p_filename;
+ }
+
+ // ----- Look for all path to remove
+ if ($p_remove_all_dir) {
+ $v_stored_filename = basename($p_filename);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Remove all path selected change '".$p_filename."' for '".$v_stored_filename."'");
+ }
+ // ----- Look for partial path remove
+ else if ($p_remove_dir != "") {
+ if (substr($p_remove_dir, -1) != '/')
+ $p_remove_dir .= "/";
+
+ if ( (substr($p_filename, 0, 2) == "./")
+ || (substr($p_remove_dir, 0, 2) == "./")) {
+
+ if ( (substr($p_filename, 0, 2) == "./")
+ && (substr($p_remove_dir, 0, 2) != "./")) {
+ $p_remove_dir = "./".$p_remove_dir;
+ }
+ if ( (substr($p_filename, 0, 2) != "./")
+ && (substr($p_remove_dir, 0, 2) == "./")) {
+ $p_remove_dir = substr($p_remove_dir, 2);
+ }
+ }
+
+ $v_compare = PclZipUtilPathInclusion($p_remove_dir,
+ $v_stored_filename);
+ if ($v_compare > 0) {
+ if ($v_compare == 2) {
+ $v_stored_filename = "";
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Path to remove is the current folder");
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Remove path '$p_remove_dir' in file '$v_stored_filename'");
+ $v_stored_filename = substr($v_stored_filename,
+ strlen($p_remove_dir));
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Result is '$v_stored_filename'");
+ }
+ }
+ }
+ // ----- Look for path to add
+ if ($p_add_dir != "") {
+ if (substr($p_add_dir, -1) == "/")
+ $v_stored_filename = $p_add_dir.$v_stored_filename;
+ else
+ $v_stored_filename = $p_add_dir."/".$v_stored_filename;
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Add path '$p_add_dir' in file '$p_filename' = '$v_stored_filename'");
+ }
+ }
+
+ // ----- Filename (reduce the path of stored name)
+ $v_stored_filename = PclZipUtilPathReduction($v_stored_filename);
+ $p_filedescr['stored_filename'] = $v_stored_filename;
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Stored filename will be '".$p_filedescr['stored_filename']."', strlen ".strlen($p_filedescr['stored_filename']));
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privWriteFileHeader()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privWriteFileHeader(&$p_header)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privWriteFileHeader", 'file="'.$p_header['filename'].'", stored as "'.$p_header['stored_filename'].'"');
+ $v_result=1;
+
+ // ----- Store the offset position of the file
+ $p_header['offset'] = ftell($this->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, 'File offset of the header :'.$p_header['offset']);
+
+ // ----- Transform UNIX mtime to DOS format mdate/mtime
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Date : \''.date("d/m/y H:i:s", $p_header['mtime']).'\'');
+ $v_date = getdate($p_header['mtime']);
+ $v_mtime = ($v_date['hours']<<11) + ($v_date['minutes']<<5) + $v_date['seconds']/2;
+ $v_mdate = (($v_date['year']-1980)<<9) + ($v_date['mon']<<5) + $v_date['mday'];
+
+ // ----- Packed data
+ $v_binary_data = pack("VvvvvvVVVvv", 0x04034b50,
+ $p_header['version_extracted'], $p_header['flag'],
+ $p_header['compression'], $v_mtime, $v_mdate,
+ $p_header['crc'], $p_header['compressed_size'],
+ $p_header['size'],
+ strlen($p_header['stored_filename']),
+ $p_header['extra_len']);
+
+ // ----- Write the first 148 bytes of the header in the archive
+ fputs($this->zip_fd, $v_binary_data, 30);
+
+ // ----- Write the variable fields
+ if (strlen($p_header['stored_filename']) != 0)
+ {
+ fputs($this->zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename']));
+ }
+ if ($p_header['extra_len'] != 0)
+ {
+ fputs($this->zip_fd, $p_header['extra'], $p_header['extra_len']);
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privWriteCentralFileHeader()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privWriteCentralFileHeader(&$p_header)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privWriteCentralFileHeader", 'file="'.$p_header['filename'].'", stored as "'.$p_header['stored_filename'].'"');
+ $v_result=1;
+
+ // TBC
+ //for(reset($p_header); $key = key($p_header); next($p_header)) {
+ // //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "header[$key] = ".$p_header[$key]);
+ //}
+
+ // ----- Transform UNIX mtime to DOS format mdate/mtime
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Date : \''.date("d/m/y H:i:s", $p_header['mtime']).'\'');
+ $v_date = getdate($p_header['mtime']);
+ $v_mtime = ($v_date['hours']<<11) + ($v_date['minutes']<<5) + $v_date['seconds']/2;
+ $v_mdate = (($v_date['year']-1980)<<9) + ($v_date['mon']<<5) + $v_date['mday'];
+
+ // ----- Packed data
+ $v_binary_data = pack("VvvvvvvVVVvvvvvVV", 0x02014b50,
+ $p_header['version'], $p_header['version_extracted'],
+ $p_header['flag'], $p_header['compression'],
+ $v_mtime, $v_mdate, $p_header['crc'],
+ $p_header['compressed_size'], $p_header['size'],
+ strlen($p_header['stored_filename']),
+ $p_header['extra_len'], $p_header['comment_len'],
+ $p_header['disk'], $p_header['internal'],
+ $p_header['external'], $p_header['offset']);
+
+ // ----- Write the 42 bytes of the header in the zip file
+ fputs($this->zip_fd, $v_binary_data, 46);
+
+ // ----- Write the variable fields
+ if (strlen($p_header['stored_filename']) != 0)
+ {
+ fputs($this->zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename']));
+ }
+ if ($p_header['extra_len'] != 0)
+ {
+ fputs($this->zip_fd, $p_header['extra'], $p_header['extra_len']);
+ }
+ if ($p_header['comment_len'] != 0)
+ {
+ fputs($this->zip_fd, $p_header['comment'], $p_header['comment_len']);
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privWriteCentralHeader()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privWriteCentralHeader($p_nb_entries, $p_size, $p_offset, $p_comment)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privWriteCentralHeader", 'nb_entries='.$p_nb_entries.', size='.$p_size.', offset='.$p_offset.', comment="'.$p_comment.'"');
+ $v_result=1;
+
+ // ----- Packed data
+ $v_binary_data = pack("VvvvvVVv", 0x06054b50, 0, 0, $p_nb_entries,
+ $p_nb_entries, $p_size,
+ $p_offset, strlen($p_comment));
+
+ // ----- Write the 22 bytes of the header in the zip file
+ fputs($this->zip_fd, $v_binary_data, 22);
+
+ // ----- Write the variable fields
+ if (strlen($p_comment) != 0)
+ {
+ fputs($this->zip_fd, $p_comment, strlen($p_comment));
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privList()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privList(&$p_list)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privList", "list");
+ $v_result=1;
+
+ // ----- Magic quotes trick
+ $this->privDisableMagicQuotes();
+
+ // ----- Open the zip file
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode");
+ if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0)
+ {
+ // ----- Magic quotes trick
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in binary read mode');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Read the central directory informations
+ $v_central_dir = array();
+ if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
+ {
+ $this->privSwapBackMagicQuotes();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Go to beginning of Central Dir
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Offset : ".$v_central_dir['offset']."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Position in file : ".ftell($this->zip_fd)."'");
+ @rewind($this->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Position in file : ".ftell($this->zip_fd)."'");
+ if (@fseek($this->zip_fd, $v_central_dir['offset']))
+ {
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Position in file : ".ftell($this->zip_fd)."'");
+
+ // ----- Read each entry
+ for ($i=0; $i<$v_central_dir['entries']; $i++)
+ {
+ // ----- Read the file header
+ if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1)
+ {
+ $this->privSwapBackMagicQuotes();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ $v_header['index'] = $i;
+
+ // ----- Get the only interesting attributes
+ $this->privConvertHeader2FileInfo($v_header, $p_list[$i]);
+ unset($v_header);
+ }
+
+ // ----- Close the zip file
+ $this->privCloseFd();
+
+ // ----- Magic quotes trick
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privConvertHeader2FileInfo()
+ // Description :
+ // This function takes the file informations from the central directory
+ // entries and extract the interesting parameters that will be given back.
+ // The resulting file infos are set in the array $p_info
+ // $p_info['filename'] : Filename with full path. Given by user (add),
+ // extracted in the filesystem (extract).
+ // $p_info['stored_filename'] : Stored filename in the archive.
+ // $p_info['size'] = Size of the file.
+ // $p_info['compressed_size'] = Compressed size of the file.
+ // $p_info['mtime'] = Last modification date of the file.
+ // $p_info['comment'] = Comment associated with the file.
+ // $p_info['folder'] = true/false : indicates if the entry is a folder or not.
+ // $p_info['status'] = status of the action on the file.
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privConvertHeader2FileInfo($p_header, &$p_info)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privConvertHeader2FileInfo", "Filename='".$p_header['filename']."'");
+ $v_result=1;
+
+ // ----- Get the interesting attributes
+ $p_info['filename'] = $p_header['filename'];
+ $p_info['stored_filename'] = $p_header['stored_filename'];
+ $p_info['size'] = $p_header['size'];
+ $p_info['compressed_size'] = $p_header['compressed_size'];
+ $p_info['mtime'] = $p_header['mtime'];
+ $p_info['comment'] = $p_header['comment'];
+ $p_info['folder'] = (($p_header['external']&0x00000010)==0x00000010);
+ $p_info['index'] = $p_header['index'];
+ $p_info['status'] = $p_header['status'];
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privExtractByRule()
+ // Description :
+ // Extract a file or directory depending of rules (by index, by name, ...)
+ // Parameters :
+ // $p_file_list : An array where will be placed the properties of each
+ // extracted file
+ // $p_path : Path to add while writing the extracted files
+ // $p_remove_path : Path to remove (from the file memorized path) while writing the
+ // extracted files. If the path does not match the file path,
+ // the file is extracted with its memorized path.
+ // $p_remove_path does not apply to 'list' mode.
+ // $p_path and $p_remove_path are commulative.
+ // Return Values :
+ // 1 on success,0 or less on error (see error code list)
+ // --------------------------------------------------------------------------------
+ function privExtractByRule(&$p_file_list, $p_path, $p_remove_path, $p_remove_all_path, &$p_options)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privExtractByRule", "path='$p_path', remove_path='$p_remove_path', remove_all_path='".($p_remove_all_path?'true':'false')."'");
+ $v_result=1;
+
+ // ----- Magic quotes trick
+ $this->privDisableMagicQuotes();
+
+ // ----- Check the path
+ if ( ($p_path == "")
+ || ( (substr($p_path, 0, 1) != "/")
+ && (substr($p_path, 0, 3) != "../")
+ && (substr($p_path,1,2)!=":/")))
+ $p_path = "./".$p_path;
+
+ // ----- Reduce the path last (and duplicated) '/'
+ if (($p_path != "./") && ($p_path != "/"))
+ {
+ // ----- Look for the path end '/'
+ while (substr($p_path, -1) == "/")
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Destination path [$p_path] ends by '/'");
+ $p_path = substr($p_path, 0, strlen($p_path)-1);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Modified to [$p_path]");
+ }
+ }
+
+ // ----- Look for path to remove format (should end by /)
+ if (($p_remove_path != "") && (substr($p_remove_path, -1) != '/'))
+ {
+ $p_remove_path .= '/';
+ }
+ $p_remove_path_size = strlen($p_remove_path);
+
+ // ----- Open the zip file
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode");
+ if (($v_result = $this->privOpenFd('rb')) != 1)
+ {
+ $this->privSwapBackMagicQuotes();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Read the central directory informations
+ $v_central_dir = array();
+ if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
+ {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Start at beginning of Central Dir
+ $v_pos_entry = $v_central_dir['offset'];
+
+ // ----- Read each entry
+ $j_start = 0;
+ for ($i=0, $v_nb_extracted=0; $i<$v_central_dir['entries']; $i++)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Read next file header entry : '$i'");
+
+ // ----- Read next Central dir entry
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Position before rewind : ".ftell($this->zip_fd)."'");
+ @rewind($this->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Position after rewind : ".ftell($this->zip_fd)."'");
+ if (@fseek($this->zip_fd, $v_pos_entry))
+ {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Position after fseek : ".ftell($this->zip_fd)."'");
+
+ // ----- Read the file header
+ $v_header = array();
+ if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1)
+ {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Store the index
+ $v_header['index'] = $i;
+
+ // ----- Store the file position
+ $v_pos_entry = ftell($this->zip_fd);
+
+ // ----- Look for the specific extract rules
+ $v_extract = false;
+
+ // ----- Look for extract by name rule
+ if ( (isset($p_options[PCLZIP_OPT_BY_NAME]))
+ && ($p_options[PCLZIP_OPT_BY_NAME] != 0)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract with rule 'ByName'");
+
+ // ----- Look if the filename is in the list
+ for ($j=0; ($j<sizeof($p_options[PCLZIP_OPT_BY_NAME])) && (!$v_extract); $j++) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Compare with file '".$p_options[PCLZIP_OPT_BY_NAME][$j]."'");
+
+ // ----- Look for a directory
+ if (substr($p_options[PCLZIP_OPT_BY_NAME][$j], -1) == "/") {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The searched item is a directory");
+
+ // ----- Look if the directory is in the filename path
+ if ( (strlen($v_header['stored_filename']) > strlen($p_options[PCLZIP_OPT_BY_NAME][$j]))
+ && (substr($v_header['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The directory is in the file path");
+ $v_extract = true;
+ }
+ }
+ // ----- Look for a filename
+ elseif ($v_header['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The file is the right one.");
+ $v_extract = true;
+ }
+ }
+ }
+
+ // ----- Look for extract by ereg rule
+ else if ( (isset($p_options[PCLZIP_OPT_BY_EREG]))
+ && ($p_options[PCLZIP_OPT_BY_EREG] != "")) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract by ereg '".$p_options[PCLZIP_OPT_BY_EREG]."'");
+
+ if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header['stored_filename'])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Filename match the regular expression");
+ $v_extract = true;
+ }
+ }
+
+ // ----- Look for extract by preg rule
+ else if ( (isset($p_options[PCLZIP_OPT_BY_PREG]))
+ && ($p_options[PCLZIP_OPT_BY_PREG] != "")) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract with rule 'ByEreg'");
+
+ if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header['stored_filename'])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Filename match the regular expression");
+ $v_extract = true;
+ }
+ }
+
+ // ----- Look for extract by index rule
+ else if ( (isset($p_options[PCLZIP_OPT_BY_INDEX]))
+ && ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract with rule 'ByIndex'");
+
+ // ----- Look if the index is in the list
+ for ($j=$j_start; ($j<sizeof($p_options[PCLZIP_OPT_BY_INDEX])) && (!$v_extract); $j++) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Look if index '$i' is in [".$p_options[PCLZIP_OPT_BY_INDEX][$j]['start'].",".$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']."]");
+
+ if (($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) && ($i<=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Found as part of an index range");
+ $v_extract = true;
+ }
+ if ($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Do not look this index range for next loop");
+ $j_start = $j+1;
+ }
+
+ if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start']>$i) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Index range is greater than index, stop loop");
+ break;
+ }
+ }
+ }
+
+ // ----- Look for no rule, which means extract all the archive
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract with no rule (extract all)");
+ $v_extract = true;
+ }
+
+ // ----- Check compression method
+ if ( ($v_extract)
+ && ( ($v_header['compression'] != 8)
+ && ($v_header['compression'] != 0))) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Unsupported compression method (".$v_header['compression'].")");
+ $v_header['status'] = 'unsupported_compression';
+
+ // ----- Look for PCLZIP_OPT_STOP_ON_ERROR
+ if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
+ && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "PCLZIP_OPT_STOP_ON_ERROR is selected, extraction will be stopped");
+
+ $this->privSwapBackMagicQuotes();
+
+ PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_COMPRESSION,
+ "Filename '".$v_header['stored_filename']."' is "
+ ."compressed by an unsupported compression "
+ ."method (".$v_header['compression'].") ");
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ }
+
+ // ----- Check encrypted files
+ if (($v_extract) && (($v_header['flag'] & 1) == 1)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Unsupported file encryption");
+ $v_header['status'] = 'unsupported_encryption';
+
+ // ----- Look for PCLZIP_OPT_STOP_ON_ERROR
+ if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
+ && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "PCLZIP_OPT_STOP_ON_ERROR is selected, extraction will be stopped");
+
+ $this->privSwapBackMagicQuotes();
+
+ PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_ENCRYPTION,
+ "Unsupported encryption for "
+ ." filename '".$v_header['stored_filename']
+ ."'");
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ }
+
+ // ----- Look for real extraction
+ if (($v_extract) && ($v_header['status'] != 'ok')) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "No need for extract");
+ $v_result = $this->privConvertHeader2FileInfo($v_header,
+ $p_file_list[$v_nb_extracted++]);
+ if ($v_result != 1) {
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ $v_extract = false;
+ }
+
+ // ----- Look for real extraction
+ if ($v_extract)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting file '".$v_header['filename']."', index '$i'");
+
+ // ----- Go to the file position
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position before rewind : ".ftell($this->zip_fd)."'");
+ @rewind($this->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position after rewind : ".ftell($this->zip_fd)."'");
+ if (@fseek($this->zip_fd, $v_header['offset']))
+ {
+ // ----- Close the zip file
+ $this->privCloseFd();
+
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position after fseek : ".ftell($this->zip_fd)."'");
+
+ // ----- Look for extraction as string
+ if ($p_options[PCLZIP_OPT_EXTRACT_AS_STRING]) {
+
+ // ----- Extracting the file
+ $v_result1 = $this->privExtractFileAsString($v_header, $v_string);
+ if ($v_result1 < 1) {
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result1);
+ return $v_result1;
+ }
+
+ // ----- Get the only interesting attributes
+ if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted])) != 1)
+ {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Set the file content
+ $p_file_list[$v_nb_extracted]['content'] = $v_string;
+
+ // ----- Next extracted file
+ $v_nb_extracted++;
+
+ // ----- Look for user callback abort
+ if ($v_result1 == 2) {
+ break;
+ }
+ }
+ // ----- Look for extraction in standard output
+ elseif ( (isset($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT]))
+ && ($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT])) {
+ // ----- Extracting the file in standard output
+ $v_result1 = $this->privExtractFileInOutput($v_header, $p_options);
+ if ($v_result1 < 1) {
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result1);
+ return $v_result1;
+ }
+
+ // ----- Get the only interesting attributes
+ if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1) {
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Look for user callback abort
+ if ($v_result1 == 2) {
+ break;
+ }
+ }
+ // ----- Look for normal extraction
+ else {
+ // ----- Extracting the file
+ $v_result1 = $this->privExtractFile($v_header,
+ $p_path, $p_remove_path,
+ $p_remove_all_path,
+ $p_options);
+ if ($v_result1 < 1) {
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result1);
+ return $v_result1;
+ }
+
+ // ----- Get the only interesting attributes
+ if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1)
+ {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Look for user callback abort
+ if ($v_result1 == 2) {
+ break;
+ }
+ }
+ }
+ }
+
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privExtractFile()
+ // Description :
+ // Parameters :
+ // Return Values :
+ //
+ // 1 : ... ?
+ // PCLZIP_ERR_USER_ABORTED(2) : User ask for extraction stop in callback
+ // --------------------------------------------------------------------------------
+ function privExtractFile(&$p_entry, $p_path, $p_remove_path, $p_remove_all_path, &$p_options)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privExtractFile', "path='$p_path', remove_path='$p_remove_path', remove_all_path='".($p_remove_all_path?'true':'false')."'");
+ $v_result=1;
+
+ // ----- Read the file header
+ if (($v_result = $this->privReadFileHeader($v_header)) != 1)
+ {
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Found file '".$v_header['filename']."', size '".$v_header['size']."'");
+
+ // ----- Check that the file header is coherent with $p_entry info
+ if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) {
+ // TBC
+ }
+
+ // ----- Look for all path to remove
+ if ($p_remove_all_path == true) {
+ // ----- Look for folder entry that not need to be extracted
+ if (($p_entry['external']&0x00000010)==0x00000010) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "The entry is a folder : need to be filtered");
+
+ $p_entry['status'] = "filtered";
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "All path is removed");
+ // ----- Get the basename of the path
+ $p_entry['filename'] = basename($p_entry['filename']);
+ }
+
+ // ----- Look for path to remove
+ else if ($p_remove_path != "")
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Look for some path to remove");
+ if (PclZipUtilPathInclusion($p_remove_path, $p_entry['filename']) == 2)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "The folder is the same as the removed path '".$p_entry['filename']."'");
+
+ // ----- Change the file status
+ $p_entry['status'] = "filtered";
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ $p_remove_path_size = strlen($p_remove_path);
+ if (substr($p_entry['filename'], 0, $p_remove_path_size) == $p_remove_path)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Found path '$p_remove_path' to remove in file '".$p_entry['filename']."'");
+
+ // ----- Remove the path
+ $p_entry['filename'] = substr($p_entry['filename'], $p_remove_path_size);
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Resulting file is '".$p_entry['filename']."'");
+ }
+ }
+
+ // ----- Add the path
+ if ($p_path != '') {
+ $p_entry['filename'] = $p_path."/".$p_entry['filename'];
+ }
+
+ // ----- Check a base_dir_restriction
+ if (isset($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Check the extract directory restriction");
+ $v_inclusion
+ = PclZipUtilPathInclusion($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION],
+ $p_entry['filename']);
+ if ($v_inclusion == 0) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "PCLZIP_OPT_EXTRACT_DIR_RESTRICTION is selected, file is outside restriction");
+
+ PclZip::privErrorLog(PCLZIP_ERR_DIRECTORY_RESTRICTION,
+ "Filename '".$p_entry['filename']."' is "
+ ."outside PCLZIP_OPT_EXTRACT_DIR_RESTRICTION");
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ }
+
+ // ----- Look for pre-extract callback
+ if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "A pre-callback '".$p_options[PCLZIP_CB_PRE_EXTRACT]."()') is defined for the extraction");
+
+ // ----- Generate a local information
+ $v_local_header = array();
+ $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
+
+ // ----- Call the callback
+ // Here I do not use call_user_func() because I need to send a reference to the
+ // header.
+ eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);');
+ if ($v_result == 0) {
+ // ----- Change the file status
+ $p_entry['status'] = "skipped";
+ $v_result = 1;
+ }
+
+ // ----- Look for abort result
+ if ($v_result == 2) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "User callback abort the extraction");
+ // ----- This status is internal and will be changed in 'skipped'
+ $p_entry['status'] = "aborted";
+ $v_result = PCLZIP_ERR_USER_ABORTED;
+ }
+
+ // ----- Update the informations
+ // Only some fields can be modified
+ $p_entry['filename'] = $v_local_header['filename'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "New filename is '".$p_entry['filename']."'");
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting file (with path) '".$p_entry['filename']."', size '$v_header[size]'");
+
+ // ----- Look if extraction should be done
+ if ($p_entry['status'] == 'ok') {
+
+ // ----- Look for specific actions while the file exist
+ if (file_exists($p_entry['filename']))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File '".$p_entry['filename']."' already exists");
+
+ // ----- Look if file is a directory
+ if (is_dir($p_entry['filename']))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Existing file '".$p_entry['filename']."' is a directory");
+
+ // ----- Change the file status
+ $p_entry['status'] = "already_a_directory";
+
+ // ----- Look for PCLZIP_OPT_STOP_ON_ERROR
+ // For historical reason first PclZip implementation does not stop
+ // when this kind of error occurs.
+ if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
+ && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "PCLZIP_OPT_STOP_ON_ERROR is selected, extraction will be stopped");
+
+ PclZip::privErrorLog(PCLZIP_ERR_ALREADY_A_DIRECTORY,
+ "Filename '".$p_entry['filename']."' is "
+ ."already used by an existing directory");
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ }
+ // ----- Look if file is write protected
+ else if (!is_writeable($p_entry['filename']))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Existing file '".$p_entry['filename']."' is write protected");
+
+ // ----- Change the file status
+ $p_entry['status'] = "write_protected";
+
+ // ----- Look for PCLZIP_OPT_STOP_ON_ERROR
+ // For historical reason first PclZip implementation does not stop
+ // when this kind of error occurs.
+ if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
+ && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "PCLZIP_OPT_STOP_ON_ERROR is selected, extraction will be stopped");
+
+ PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL,
+ "Filename '".$p_entry['filename']."' exists "
+ ."and is write protected");
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ }
+
+ // ----- Look if the extracted file is older
+ else if (filemtime($p_entry['filename']) > $p_entry['mtime'])
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Existing file '".$p_entry['filename']."' is newer (".date("l dS of F Y h:i:s A", filemtime($p_entry['filename'])).") than the extracted file (".date("l dS of F Y h:i:s A", $p_entry['mtime']).")");
+ // ----- Change the file status
+ if ( (isset($p_options[PCLZIP_OPT_REPLACE_NEWER]))
+ && ($p_options[PCLZIP_OPT_REPLACE_NEWER]===true)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "PCLZIP_OPT_REPLACE_NEWER is selected, file will be replaced");
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File will not be replaced");
+ $p_entry['status'] = "newer_exist";
+
+ // ----- Look for PCLZIP_OPT_STOP_ON_ERROR
+ // For historical reason first PclZip implementation does not stop
+ // when this kind of error occurs.
+ if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
+ && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "PCLZIP_OPT_STOP_ON_ERROR is selected, extraction will be stopped");
+
+ PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL,
+ "Newer version of '".$p_entry['filename']."' exists "
+ ."and option PCLZIP_OPT_REPLACE_NEWER is not selected");
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ }
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Existing file '".$p_entry['filename']."' is older than the extrated one - will be replaced by the extracted one (".date("l dS of F Y h:i:s A", filemtime($p_entry['filename'])).") than the extracted file (".date("l dS of F Y h:i:s A", $p_entry['mtime']).")");
+ }
+ }
+
+ // ----- Check the directory availability and create it if necessary
+ else {
+ if ((($p_entry['external']&0x00000010)==0x00000010) || (substr($p_entry['filename'], -1) == '/'))
+ $v_dir_to_check = $p_entry['filename'];
+ else if (!strstr($p_entry['filename'], "/"))
+ $v_dir_to_check = "";
+ else
+ $v_dir_to_check = dirname($p_entry['filename']);
+
+ if (($v_result = $this->privDirCheck($v_dir_to_check, (($p_entry['external']&0x00000010)==0x00000010))) != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Unable to create path for '".$p_entry['filename']."'");
+
+ // ----- Change the file status
+ $p_entry['status'] = "path_creation_fail";
+
+ // ----- Return
+ ////--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ //return $v_result;
+ $v_result = 1;
+ }
+ }
+ }
+
+ // ----- Look if extraction should be done
+ if ($p_entry['status'] == 'ok') {
+
+ // ----- Do the extraction (if not a folder)
+ if (!(($p_entry['external']&0x00000010)==0x00000010))
+ {
+ // ----- Look for not compressed file
+ if ($p_entry['compression'] == 0) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting an un-compressed file");
+
+ // ----- Opening destination file
+ if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Error while opening '".$p_entry['filename']."' in write binary mode");
+
+ // ----- Change the file status
+ $p_entry['status'] = "write_error";
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Read '".$p_entry['size']."' bytes");
+
+ // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks
+ $v_size = $p_entry['compressed_size'];
+ while ($v_size != 0)
+ {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Read $v_read_size bytes");
+ $v_buffer = @fread($this->zip_fd, $v_read_size);
+ /* Try to speed up the code
+ $v_binary_data = pack('a'.$v_read_size, $v_buffer);
+ @fwrite($v_dest_file, $v_binary_data, $v_read_size);
+ */
+ @fwrite($v_dest_file, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+
+ // ----- Closing the destination file
+ fclose($v_dest_file);
+
+ // ----- Change the file mtime
+ touch($p_entry['filename'], $p_entry['mtime']);
+
+
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting a compressed file (Compression method ".$p_entry['compression'].")");
+ // ----- TBC
+ // Need to be finished
+ if (($p_entry['flag'] & 1) == 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File is encrypted");
+ /*
+ // ----- Read the encryption header
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Read 12 encryption header bytes");
+ $v_encryption_header = @fread($this->zip_fd, 12);
+
+ // ----- Read the encrypted & compressed file in a buffer
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Read '".($p_entry['compressed_size']-12)."' compressed & encrypted bytes");
+ $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']-12);
+
+ // ----- Decrypt the buffer
+ $this->privDecrypt($v_encryption_header, $v_buffer,
+ $p_entry['compressed_size']-12, $p_entry['crc']);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Buffer is '".$v_buffer."'");
+ */
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Read '".$p_entry['compressed_size']."' compressed bytes");
+ // ----- Read the compressed file in a buffer (one shot)
+ $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']);
+ }
+
+ // ----- Decompress the file
+ $v_file_content = @gzinflate($v_buffer);
+ unset($v_buffer);
+ if ($v_file_content === FALSE) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Unable to inflate compressed file");
+
+ // ----- Change the file status
+ // TBC
+ $p_entry['status'] = "error";
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Opening destination file
+ if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Error while opening '".$p_entry['filename']."' in write binary mode");
+
+ // ----- Change the file status
+ $p_entry['status'] = "write_error";
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Write the uncompressed data
+ @fwrite($v_dest_file, $v_file_content, $p_entry['size']);
+ unset($v_file_content);
+
+ // ----- Closing the destination file
+ @fclose($v_dest_file);
+
+ // ----- Change the file mtime
+ @touch($p_entry['filename'], $p_entry['mtime']);
+ }
+
+ // ----- Look for chmod option
+ if (isset($p_options[PCLZIP_OPT_SET_CHMOD])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "chmod option activated '".$p_options[PCLZIP_OPT_SET_CHMOD]."'");
+
+ // ----- Change the mode of the file
+ @chmod($p_entry['filename'], $p_options[PCLZIP_OPT_SET_CHMOD]);
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extraction done");
+ }
+ }
+
+ // ----- Change abort status
+ if ($p_entry['status'] == "aborted") {
+ $p_entry['status'] = "skipped";
+ }
+
+ // ----- Look for post-extract callback
+ elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "A post-callback '".$p_options[PCLZIP_CB_POST_EXTRACT]."()') is defined for the extraction");
+
+ // ----- Generate a local information
+ $v_local_header = array();
+ $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
+
+ // ----- Call the callback
+ // Here I do not use call_user_func() because I need to send a reference to the
+ // header.
+ eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);');
+
+ // ----- Look for abort result
+ if ($v_result == 2) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "User callback abort the extraction");
+ $v_result = PCLZIP_ERR_USER_ABORTED;
+ }
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privExtractFileInOutput()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privExtractFileInOutput(&$p_entry, &$p_options)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privExtractFileInOutput', "");
+ $v_result=1;
+
+ // ----- Read the file header
+ if (($v_result = $this->privReadFileHeader($v_header)) != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Found file '".$v_header['filename']."', size '".$v_header['size']."'");
+
+ // ----- Check that the file header is coherent with $p_entry info
+ if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) {
+ // TBC
+ }
+
+ // ----- Look for pre-extract callback
+ if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "A pre-callback '".$p_options[PCLZIP_CB_PRE_EXTRACT]."()') is defined for the extraction");
+
+ // ----- Generate a local information
+ $v_local_header = array();
+ $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
+
+ // ----- Call the callback
+ // Here I do not use call_user_func() because I need to send a reference to the
+ // header.
+ eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);');
+ if ($v_result == 0) {
+ // ----- Change the file status
+ $p_entry['status'] = "skipped";
+ $v_result = 1;
+ }
+
+ // ----- Look for abort result
+ if ($v_result == 2) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "User callback abort the extraction");
+ // ----- This status is internal and will be changed in 'skipped'
+ $p_entry['status'] = "aborted";
+ $v_result = PCLZIP_ERR_USER_ABORTED;
+ }
+
+ // ----- Update the informations
+ // Only some fields can be modified
+ $p_entry['filename'] = $v_local_header['filename'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "New filename is '".$p_entry['filename']."'");
+ }
+
+ // ----- Trace
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting file (with path) '".$p_entry['filename']."', size '$v_header[size]'");
+
+ // ----- Look if extraction should be done
+ if ($p_entry['status'] == 'ok') {
+
+ // ----- Do the extraction (if not a folder)
+ if (!(($p_entry['external']&0x00000010)==0x00000010)) {
+ // ----- Look for not compressed file
+ if ($p_entry['compressed_size'] == $p_entry['size']) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting an un-compressed file");
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Reading '".$p_entry['size']."' bytes");
+
+ // ----- Read the file in a buffer (one shot)
+ $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']);
+
+ // ----- Send the file to the output
+ echo $v_buffer;
+ unset($v_buffer);
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting a compressed file");
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Reading '".$p_entry['size']."' bytes");
+
+ // ----- Read the compressed file in a buffer (one shot)
+ $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']);
+
+ // ----- Decompress the file
+ $v_file_content = gzinflate($v_buffer);
+ unset($v_buffer);
+
+ // ----- Send the file to the output
+ echo $v_file_content;
+ unset($v_file_content);
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extraction done");
+ }
+ }
+
+ // ----- Change abort status
+ if ($p_entry['status'] == "aborted") {
+ $p_entry['status'] = "skipped";
+ }
+
+ // ----- Look for post-extract callback
+ elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "A post-callback '".$p_options[PCLZIP_CB_POST_EXTRACT]."()') is defined for the extraction");
+
+ // ----- Generate a local information
+ $v_local_header = array();
+ $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
+
+ // ----- Call the callback
+ // Here I do not use call_user_func() because I need to send a reference to the
+ // header.
+ eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);');
+
+ // ----- Look for abort result
+ if ($v_result == 2) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "User callback abort the extraction");
+ $v_result = PCLZIP_ERR_USER_ABORTED;
+ }
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privExtractFileAsString()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privExtractFileAsString(&$p_entry, &$p_string)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privExtractFileAsString', "p_entry['filename']='".$p_entry['filename']."'");
+ $v_result=1;
+
+ // ----- Read the file header
+ $v_header = array();
+ if (($v_result = $this->privReadFileHeader($v_header)) != 1)
+ {
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Found file '".$v_header['filename']."', size '".$v_header['size']."'");
+
+ // ----- Check that the file header is coherent with $p_entry info
+ if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) {
+ // TBC
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting file in string (with path) '".$p_entry['filename']."', size '$v_header[size]'");
+
+ // ----- Do the extraction (if not a folder)
+ if (!(($p_entry['external']&0x00000010)==0x00000010))
+ {
+ // ----- Look for not compressed file
+// if ($p_entry['compressed_size'] == $p_entry['size'])
+ if ($p_entry['compression'] == 0) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting an un-compressed file");
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Reading '".$p_entry['size']."' bytes");
+
+ // ----- Reading the file
+ $p_string = @fread($this->zip_fd, $p_entry['compressed_size']);
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting a compressed file (compression method '".$p_entry['compression']."')");
+
+ // ----- Reading the file
+ $v_data = @fread($this->zip_fd, $p_entry['compressed_size']);
+
+ // ----- Decompress the file
+ if (($p_string = @gzinflate($v_data)) === FALSE) {
+ // TBC
+ }
+ }
+
+ // ----- Trace
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extraction done");
+ }
+ else {
+ // TBC : error : can not extract a folder in a string
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privReadFileHeader()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privReadFileHeader(&$p_header)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privReadFileHeader", "");
+ $v_result=1;
+
+ // ----- Read the 4 bytes signature
+ $v_binary_data = @fread($this->zip_fd, 4);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Binary data is : '".sprintf("%08x", $v_binary_data)."'");
+ $v_data = unpack('Vid', $v_binary_data);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Binary signature is : '".sprintf("0x%08x", $v_data['id'])."'");
+
+ // ----- Check signature
+ if ($v_data['id'] != 0x04034b50)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Invalid File header");
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Read the first 42 bytes of the header
+ $v_binary_data = fread($this->zip_fd, 26);
+
+ // ----- Look for invalid block size
+ if (strlen($v_binary_data) != 26)
+ {
+ $p_header['filename'] = "";
+ $p_header['status'] = "invalid_header";
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Invalid block size : ".strlen($v_binary_data));
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid block size : ".strlen($v_binary_data));
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Extract the values
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Header : '".$v_binary_data."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Header (Hex) : '".bin2hex($v_binary_data)."'");
+ $v_data = unpack('vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $v_binary_data);
+
+ // ----- Get filename
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "File name length : ".$v_data['filename_len']);
+ $p_header['filename'] = fread($this->zip_fd, $v_data['filename_len']);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Filename : \''.$p_header['filename'].'\'');
+
+ // ----- Get extra_fields
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extra field length : ".$v_data['extra_len']);
+ if ($v_data['extra_len'] != 0) {
+ $p_header['extra'] = fread($this->zip_fd, $v_data['extra_len']);
+ }
+ else {
+ $p_header['extra'] = '';
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Extra field : \''.bin2hex($p_header['extra']).'\'');
+
+ // ----- Extract properties
+ $p_header['version_extracted'] = $v_data['version'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Version need to extract : ('.$p_header['version_extracted'].') \''.($p_header['version_extracted']/10).'.'.($p_header['version_extracted']%10).'\'');
+ $p_header['compression'] = $v_data['compression'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Compression method : \''.$p_header['compression'].'\'');
+ $p_header['size'] = $v_data['size'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Size : \''.$p_header['size'].'\'');
+ $p_header['compressed_size'] = $v_data['compressed_size'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Compressed Size : \''.$p_header['compressed_size'].'\'');
+ $p_header['crc'] = $v_data['crc'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'CRC : \''.sprintf("0x%X", $p_header['crc']).'\'');
+ $p_header['flag'] = $v_data['flag'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Flag : \''.$p_header['flag'].'\'');
+ $p_header['filename_len'] = $v_data['filename_len'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Filename_len : \''.$p_header['filename_len'].'\'');
+
+ // ----- Recuperate date in UNIX format
+ $p_header['mdate'] = $v_data['mdate'];
+ $p_header['mtime'] = $v_data['mtime'];
+ if ($p_header['mdate'] && $p_header['mtime'])
+ {
+ // ----- Extract time
+ $v_hour = ($p_header['mtime'] & 0xF800) >> 11;
+ $v_minute = ($p_header['mtime'] & 0x07E0) >> 5;
+ $v_seconde = ($p_header['mtime'] & 0x001F)*2;
+
+ // ----- Extract date
+ $v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980;
+ $v_month = ($p_header['mdate'] & 0x01E0) >> 5;
+ $v_day = $p_header['mdate'] & 0x001F;
+
+ // ----- Get UNIX date format
+ $p_header['mtime'] = mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year);
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Date : \''.date("d/m/y H:i:s", $p_header['mtime']).'\'');
+ }
+ else
+ {
+ $p_header['mtime'] = time();
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Date is actual : \''.date("d/m/y H:i:s", $p_header['mtime']).'\'');
+ }
+
+ // TBC
+ //for(reset($v_data); $key = key($v_data); next($v_data)) {
+ // //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Attribut[$key] = ".$v_data[$key]);
+ //}
+
+ // ----- Set the stored filename
+ $p_header['stored_filename'] = $p_header['filename'];
+
+ // ----- Set the status field
+ $p_header['status'] = "ok";
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privReadCentralFileHeader()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privReadCentralFileHeader(&$p_header)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privReadCentralFileHeader", "");
+ $v_result=1;
+
+ // ----- Read the 4 bytes signature
+ $v_binary_data = @fread($this->zip_fd, 4);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Binary data is : '".sprintf("%08x", $v_binary_data)."'");
+ $v_data = unpack('Vid', $v_binary_data);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Binary signature is : '".sprintf("0x%08x", $v_data['id'])."'");
+
+ // ----- Check signature
+ if ($v_data['id'] != 0x02014b50)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Invalid Central Dir File signature");
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Read the first 42 bytes of the header
+ $v_binary_data = fread($this->zip_fd, 42);
+
+ // ----- Look for invalid block size
+ if (strlen($v_binary_data) != 42)
+ {
+ $p_header['filename'] = "";
+ $p_header['status'] = "invalid_header";
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Invalid block size : ".strlen($v_binary_data));
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid block size : ".strlen($v_binary_data));
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Extract the values
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Header : '".$v_binary_data."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Header (Hex) : '".bin2hex($v_binary_data)."'");
+ $p_header = unpack('vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/Vexternal/Voffset', $v_binary_data);
+
+ // ----- Get filename
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "File name length : ".$p_header['filename_len']);
+ if ($p_header['filename_len'] != 0)
+ $p_header['filename'] = fread($this->zip_fd, $p_header['filename_len']);
+ else
+ $p_header['filename'] = '';
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Filename : \''.$p_header['filename'].'\'');
+
+ // ----- Get extra
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Extra length : ".$p_header['extra_len']);
+ if ($p_header['extra_len'] != 0)
+ $p_header['extra'] = fread($this->zip_fd, $p_header['extra_len']);
+ else
+ $p_header['extra'] = '';
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Extra : \''.$p_header['extra'].'\'');
+
+ // ----- Get comment
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Comment length : ".$p_header['comment_len']);
+ if ($p_header['comment_len'] != 0)
+ $p_header['comment'] = fread($this->zip_fd, $p_header['comment_len']);
+ else
+ $p_header['comment'] = '';
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Comment : \''.$p_header['comment'].'\'');
+
+ // ----- Extract properties
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Version : \''.($p_header['version']/10).'.'.($p_header['version']%10).'\'');
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Version need to extract : \''.($p_header['version_extracted']/10).'.'.($p_header['version_extracted']%10).'\'');
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Size : \''.$p_header['size'].'\'');
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Compressed Size : \''.$p_header['compressed_size'].'\'');
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'CRC : \''.sprintf("0x%X", $p_header['crc']).'\'');
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Flag : \''.$p_header['flag'].'\'');
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Offset : \''.$p_header['offset'].'\'');
+
+ // ----- Recuperate date in UNIX format
+ if ($p_header['mdate'] && $p_header['mtime'])
+ {
+ // ----- Extract time
+ $v_hour = ($p_header['mtime'] & 0xF800) >> 11;
+ $v_minute = ($p_header['mtime'] & 0x07E0) >> 5;
+ $v_seconde = ($p_header['mtime'] & 0x001F)*2;
+
+ // ----- Extract date
+ $v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980;
+ $v_month = ($p_header['mdate'] & 0x01E0) >> 5;
+ $v_day = $p_header['mdate'] & 0x001F;
+
+ // ----- Get UNIX date format
+ $p_header['mtime'] = mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year);
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Date : \''.date("d/m/y H:i:s", $p_header['mtime']).'\'');
+ }
+ else
+ {
+ $p_header['mtime'] = time();
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Date is actual : \''.date("d/m/y H:i:s", $p_header['mtime']).'\'');
+ }
+
+ // ----- Set the stored filename
+ $p_header['stored_filename'] = $p_header['filename'];
+
+ // ----- Set default status to ok
+ $p_header['status'] = 'ok';
+
+ // ----- Look if it is a directory
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Internal (Hex) : '".sprintf("Ox%04X", $p_header['internal'])."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "External (Hex) : '".sprintf("Ox%04X", $p_header['external'])."' (".(($p_header['external']&0x00000010)==0x00000010?'is a folder':'is a file').')');
+ if (substr($p_header['filename'], -1) == '/') {
+ //$p_header['external'] = 0x41FF0010;
+ $p_header['external'] = 0x00000010;
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Force folder external : \''.sprintf("Ox%04X", $p_header['external']).'\'');
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Header of filename : \''.$p_header['filename'].'\'');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privCheckFileHeaders()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // 1 on success,
+ // 0 on error;
+ // --------------------------------------------------------------------------------
+ function privCheckFileHeaders(&$p_local_header, &$p_central_header)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privCheckFileHeaders", "");
+ $v_result=1;
+
+ // ----- Check the static values
+ // TBC
+ if ($p_local_header['filename'] != $p_central_header['filename']) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check "filename" : TBC To Be Completed');
+ }
+ if ($p_local_header['version_extracted'] != $p_central_header['version_extracted']) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check "version_extracted" : TBC To Be Completed');
+ }
+ if ($p_local_header['flag'] != $p_central_header['flag']) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check "flag" : TBC To Be Completed');
+ }
+ if ($p_local_header['compression'] != $p_central_header['compression']) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check "compression" : TBC To Be Completed');
+ }
+ if ($p_local_header['mtime'] != $p_central_header['mtime']) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check "mtime" : TBC To Be Completed');
+ }
+ if ($p_local_header['filename_len'] != $p_central_header['filename_len']) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check "filename_len" : TBC To Be Completed');
+ }
+
+ // ----- Look for flag bit 3
+ if (($p_local_header['flag'] & 8) == 8) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Purpose bit flag bit 3 set !');
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'File size, compression size and crc found in central header');
+ $p_local_header['size'] = $p_central_header['size'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Size : \''.$p_local_header['size'].'\'');
+ $p_local_header['compressed_size'] = $p_central_header['compressed_size'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Compressed Size : \''.$p_local_header['compressed_size'].'\'');
+ $p_local_header['crc'] = $p_central_header['crc'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'CRC : \''.sprintf("0x%X", $p_local_header['crc']).'\'');
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privReadEndCentralDir()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privReadEndCentralDir(&$p_central_dir)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privReadEndCentralDir", "");
+ $v_result=1;
+
+ // ----- Go to the end of the zip file
+ $v_size = filesize($this->zipname);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Size of the file :$v_size");
+ @fseek($this->zip_fd, $v_size);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Position at end of zip file : \''.ftell($this->zip_fd).'\'');
+ if (@ftell($this->zip_fd) != $v_size)
+ {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to go to the end of the archive \''.$this->zipname.'\'');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- First try : look if this is an archive with no commentaries (most of the time)
+ // in this case the end of central dir is at 22 bytes of the file end
+ $v_found = 0;
+ if ($v_size > 26) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Look for central dir with no comment');
+ @fseek($this->zip_fd, $v_size-22);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Position after min central position : \''.ftell($this->zip_fd).'\'');
+ if (($v_pos = @ftell($this->zip_fd)) != ($v_size-22))
+ {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this->zipname.'\'');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Read for bytes
+ $v_binary_data = @fread($this->zip_fd, 4);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Binary data is : '".sprintf("%08x", $v_binary_data)."'");
+ $v_data = @unpack('Vid', $v_binary_data);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Binary signature is : '".sprintf("0x%08x", $v_data['id'])."'");
+
+ // ----- Check signature
+ if ($v_data['id'] == 0x06054b50) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Found central dir at the default position.");
+ $v_found = 1;
+ }
+
+ $v_pos = ftell($this->zip_fd);
+ }
+
+ // ----- Go back to the maximum possible size of the Central Dir End Record
+ if (!$v_found) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Start extended search of end central dir');
+ $v_maximum_size = 65557; // 0xFFFF + 22;
+ if ($v_maximum_size > $v_size)
+ $v_maximum_size = $v_size;
+ @fseek($this->zip_fd, $v_size-$v_maximum_size);
+ if (@ftell($this->zip_fd) != ($v_size-$v_maximum_size))
+ {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this->zipname.'\'');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Position after max central position : \''.ftell($this->zip_fd).'\'');
+
+ // ----- Read byte per byte in order to find the signature
+ $v_pos = ftell($this->zip_fd);
+ $v_bytes = 0x00000000;
+ while ($v_pos < $v_size)
+ {
+ // ----- Read a byte
+ $v_byte = @fread($this->zip_fd, 1);
+
+ // ----- Add the byte
+ $v_bytes = ($v_bytes << 8) | Ord($v_byte);
+
+ // ----- Compare the bytes
+ if ($v_bytes == 0x504b0506)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Found End Central Dir signature at position : \''.ftell($this->zip_fd).'\'');
+ $v_pos++;
+ break;
+ }
+
+ $v_pos++;
+ }
+
+ // ----- Look if not found end of central dir
+ if ($v_pos == $v_size)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Unable to find End of Central Dir Record signature");
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Unable to find End of Central Dir Record signature");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ }
+
+ // ----- Read the first 18 bytes of the header
+ $v_binary_data = fread($this->zip_fd, 18);
+
+ // ----- Look for invalid block size
+ if (strlen($v_binary_data) != 18)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Invalid End of Central Dir Record size : ".strlen($v_binary_data));
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid End of Central Dir Record size : ".strlen($v_binary_data));
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Extract the values
+ ////--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Central Dir Record : '".$v_binary_data."'");
+ ////--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Central Dir Record (Hex) : '".bin2hex($v_binary_data)."'");
+ $v_data = unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size', $v_binary_data);
+
+ // ----- Check the global size
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Comment length : ".$v_data['comment_size']);
+ if (($v_pos + $v_data['comment_size'] + 18) != $v_size) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "The central dir is not at the end of the archive. Some trailing bytes exists after the archive.");
+
+ // ----- Removed in release 2.2 see readme file
+ // The check of the file size is a little too strict.
+ // Some bugs where found when a zip is encrypted/decrypted with 'crypt'.
+ // While decrypted, zip has training 0 bytes
+ if (0) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT,
+ 'The central dir is not at the end of the archive.'
+ .' Some trailing bytes exists after the archive.');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ }
+
+ // ----- Get comment
+ if ($v_data['comment_size'] != 0)
+ $p_central_dir['comment'] = fread($this->zip_fd, $v_data['comment_size']);
+ else
+ $p_central_dir['comment'] = '';
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Comment : \''.$p_central_dir['comment'].'\'');
+
+ $p_central_dir['entries'] = $v_data['entries'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Nb of entries : \''.$p_central_dir['entries'].'\'');
+ $p_central_dir['disk_entries'] = $v_data['disk_entries'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Nb of entries for this disk : \''.$p_central_dir['disk_entries'].'\'');
+ $p_central_dir['offset'] = $v_data['offset'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Offset of Central Dir : \''.$p_central_dir['offset'].'\'');
+ $p_central_dir['size'] = $v_data['size'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Size of Central Dir : \''.$p_central_dir['size'].'\'');
+ $p_central_dir['disk'] = $v_data['disk'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Disk number : \''.$p_central_dir['disk'].'\'');
+ $p_central_dir['disk_start'] = $v_data['disk_start'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Start disk number : \''.$p_central_dir['disk_start'].'\'');
+
+ // TBC
+ //for(reset($p_central_dir); $key = key($p_central_dir); next($p_central_dir)) {
+ // //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "central_dir[$key] = ".$p_central_dir[$key]);
+ //}
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privDeleteByRule()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privDeleteByRule(&$p_result_list, &$p_options)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privDeleteByRule", "");
+ $v_result=1;
+ $v_list_detail = array();
+
+ // ----- Open the zip file
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode");
+ if (($v_result=$this->privOpenFd('rb')) != 1)
+ {
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Read the central directory informations
+ $v_central_dir = array();
+ if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
+ {
+ $this->privCloseFd();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Go to beginning of File
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in file : ".ftell($this->zip_fd)."'");
+ @rewind($this->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in file : ".ftell($this->zip_fd)."'");
+
+ // ----- Scan all the files
+ // ----- Start at beginning of Central Dir
+ $v_pos_entry = $v_central_dir['offset'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position before rewind : ".ftell($this->zip_fd)."'");
+ @rewind($this->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position after rewind : ".ftell($this->zip_fd)."'");
+ if (@fseek($this->zip_fd, $v_pos_entry))
+ {
+ // ----- Close the zip file
+ $this->privCloseFd();
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position after fseek : ".ftell($this->zip_fd)."'");
+
+ // ----- Read each entry
+ $v_header_list = array();
+ $j_start = 0;
+ for ($i=0, $v_nb_extracted=0; $i<$v_central_dir['entries']; $i++)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Read next file header entry (index '$i')");
+
+ // ----- Read the file header
+ $v_header_list[$v_nb_extracted] = array();
+ if (($v_result = $this->privReadCentralFileHeader($v_header_list[$v_nb_extracted])) != 1)
+ {
+ // ----- Close the zip file
+ $this->privCloseFd();
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Filename (index '$i') : '".$v_header_list[$v_nb_extracted]['stored_filename']."'");
+
+ // ----- Store the index
+ $v_header_list[$v_nb_extracted]['index'] = $i;
+
+ // ----- Look for the specific extract rules
+ $v_found = false;
+
+ // ----- Look for extract by name rule
+ if ( (isset($p_options[PCLZIP_OPT_BY_NAME]))
+ && ($p_options[PCLZIP_OPT_BY_NAME] != 0)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract with rule 'ByName'");
+
+ // ----- Look if the filename is in the list
+ for ($j=0; ($j<sizeof($p_options[PCLZIP_OPT_BY_NAME])) && (!$v_found); $j++) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Compare with file '".$p_options[PCLZIP_OPT_BY_NAME][$j]."'");
+
+ // ----- Look for a directory
+ if (substr($p_options[PCLZIP_OPT_BY_NAME][$j], -1) == "/") {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The searched item is a directory");
+
+ // ----- Look if the directory is in the filename path
+ if ( (strlen($v_header_list[$v_nb_extracted]['stored_filename']) > strlen($p_options[PCLZIP_OPT_BY_NAME][$j]))
+ && (substr($v_header_list[$v_nb_extracted]['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The directory is in the file path");
+ $v_found = true;
+ }
+ elseif ( (($v_header_list[$v_nb_extracted]['external']&0x00000010)==0x00000010) /* Indicates a folder */
+ && ($v_header_list[$v_nb_extracted]['stored_filename'].'/' == $p_options[PCLZIP_OPT_BY_NAME][$j])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The entry is the searched directory");
+ $v_found = true;
+ }
+ }
+ // ----- Look for a filename
+ elseif ($v_header_list[$v_nb_extracted]['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The file is the right one.");
+ $v_found = true;
+ }
+ }
+ }
+
+ // ----- Look for extract by ereg rule
+ else if ( (isset($p_options[PCLZIP_OPT_BY_EREG]))
+ && ($p_options[PCLZIP_OPT_BY_EREG] != "")) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract by ereg '".$p_options[PCLZIP_OPT_BY_EREG]."'");
+
+ if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header_list[$v_nb_extracted]['stored_filename'])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Filename match the regular expression");
+ $v_found = true;
+ }
+ }
+
+ // ----- Look for extract by preg rule
+ else if ( (isset($p_options[PCLZIP_OPT_BY_PREG]))
+ && ($p_options[PCLZIP_OPT_BY_PREG] != "")) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract with rule 'ByEreg'");
+
+ if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header_list[$v_nb_extracted]['stored_filename'])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Filename match the regular expression");
+ $v_found = true;
+ }
+ }
+
+ // ----- Look for extract by index rule
+ else if ( (isset($p_options[PCLZIP_OPT_BY_INDEX]))
+ && ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract with rule 'ByIndex'");
+
+ // ----- Look if the index is in the list
+ for ($j=$j_start; ($j<sizeof($p_options[PCLZIP_OPT_BY_INDEX])) && (!$v_found); $j++) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Look if index '$i' is in [".$p_options[PCLZIP_OPT_BY_INDEX][$j]['start'].",".$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']."]");
+
+ if (($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) && ($i<=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Found as part of an index range");
+ $v_found = true;
+ }
+ if ($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Do not look this index range for next loop");
+ $j_start = $j+1;
+ }
+
+ if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start']>$i) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Index range is greater than index, stop loop");
+ break;
+ }
+ }
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "No argument mean remove all file");
+ $v_found = true;
+ }
+
+ // ----- Look for deletion
+ if ($v_found)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File '".$v_header_list[$v_nb_extracted]['stored_filename']."', index '$i' need to be deleted");
+ unset($v_header_list[$v_nb_extracted]);
+ }
+ else
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File '".$v_header_list[$v_nb_extracted]['stored_filename']."', index '$i' will not be deleted");
+ $v_nb_extracted++;
+ }
+ }
+
+ // ----- Look if something need to be deleted
+ if ($v_nb_extracted > 0) {
+
+ // ----- Creates a temporay file
+ $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp';
+
+ // ----- Creates a temporary zip archive
+ $v_temp_zip = new PclZip($v_zip_temp_name);
+
+ // ----- Open the temporary zip file in write mode
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary write mode");
+ if (($v_result = $v_temp_zip->privOpenFd('wb')) != 1) {
+ $this->privCloseFd();
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Look which file need to be kept
+ for ($i=0; $i<sizeof($v_header_list); $i++) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Keep entry index '$i' : '".$v_header_list[$i]['filename']."'");
+
+ // ----- Calculate the position of the header
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Offset='". $v_header_list[$i]['offset']."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position before rewind : ".ftell($this->zip_fd)."'");
+ @rewind($this->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position after rewind : ".ftell($this->zip_fd)."'");
+ if (@fseek($this->zip_fd, $v_header_list[$i]['offset'])) {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $v_temp_zip->privCloseFd();
+ @unlink($v_zip_temp_name);
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position after fseek : ".ftell($this->zip_fd)."'");
+
+ // ----- Read the file header
+ $v_local_header = array();
+ if (($v_result = $this->privReadFileHeader($v_local_header)) != 1) {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $v_temp_zip->privCloseFd();
+ @unlink($v_zip_temp_name);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Check that local file header is same as central file header
+ if ($this->privCheckFileHeaders($v_local_header,
+ $v_header_list[$i]) != 1) {
+ // TBC
+ }
+ unset($v_local_header);
+
+ // ----- Write the file header
+ if (($v_result = $v_temp_zip->privWriteFileHeader($v_header_list[$i])) != 1) {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $v_temp_zip->privCloseFd();
+ @unlink($v_zip_temp_name);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Offset for this file is '".$v_header_list[$i]['offset']."'");
+
+ // ----- Read/write the data block
+ if (($v_result = PclZipUtilCopyBlock($this->zip_fd, $v_temp_zip->zip_fd, $v_header_list[$i]['compressed_size'])) != 1) {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $v_temp_zip->privCloseFd();
+ @unlink($v_zip_temp_name);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ }
+
+ // ----- Store the offset of the central dir
+ $v_offset = @ftell($v_temp_zip->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "New offset of central dir : $v_offset");
+
+ // ----- Re-Create the Central Dir files header
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Creates the new central directory");
+ for ($i=0; $i<sizeof($v_header_list); $i++) {
+ // ----- Create the file header
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Offset of file : ".$v_header_list[$i]['offset']);
+ if (($v_result = $v_temp_zip->privWriteCentralFileHeader($v_header_list[$i])) != 1) {
+ $v_temp_zip->privCloseFd();
+ $this->privCloseFd();
+ @unlink($v_zip_temp_name);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Transform the header to a 'usable' info
+ $v_temp_zip->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]);
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Creates the central directory footer");
+
+ // ----- Zip file comment
+ $v_comment = '';
+ if (isset($p_options[PCLZIP_OPT_COMMENT])) {
+ $v_comment = $p_options[PCLZIP_OPT_COMMENT];
+ }
+
+ // ----- Calculate the size of the central header
+ $v_size = @ftell($v_temp_zip->zip_fd)-$v_offset;
+
+ // ----- Create the central dir footer
+ if (($v_result = $v_temp_zip->privWriteCentralHeader(sizeof($v_header_list), $v_size, $v_offset, $v_comment)) != 1) {
+ // ----- Reset the file list
+ unset($v_header_list);
+ $v_temp_zip->privCloseFd();
+ $this->privCloseFd();
+ @unlink($v_zip_temp_name);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Close
+ $v_temp_zip->privCloseFd();
+ $this->privCloseFd();
+
+ // ----- Delete the zip file
+ // TBC : I should test the result ...
+ @unlink($this->zipname);
+
+ // ----- Rename the temporary file
+ // TBC : I should test the result ...
+ //@rename($v_zip_temp_name, $this->zipname);
+ PclZipUtilRename($v_zip_temp_name, $this->zipname);
+
+ // ----- Destroy the temporary archive
+ unset($v_temp_zip);
+ }
+
+ // ----- Remove every files : reset the file
+ else if ($v_central_dir['entries'] != 0) {
+ $this->privCloseFd();
+
+ if (($v_result = $this->privOpenFd('wb')) != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ if (($v_result = $this->privWriteCentralHeader(0, 0, 0, '')) != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ $this->privCloseFd();
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privDirCheck()
+ // Description :
+ // Check if a directory exists, if not it creates it and all the parents directory
+ // which may be useful.
+ // Parameters :
+ // $p_dir : Directory path to check.
+ // Return Values :
+ // 1 : OK
+ // -1 : Unable to create directory
+ // --------------------------------------------------------------------------------
+ function privDirCheck($p_dir, $p_is_dir=false)
+ {
+ $v_result = 1;
+
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privDirCheck", "entry='$p_dir', is_dir='".($p_is_dir?"true":"false")."'");
+
+ // ----- Remove the final '/'
+ if (($p_is_dir) && (substr($p_dir, -1)=='/'))
+ {
+ $p_dir = substr($p_dir, 0, strlen($p_dir)-1);
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Looking for entry '$p_dir'");
+
+ // ----- Check the directory availability
+ if ((is_dir($p_dir)) || ($p_dir == ""))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, "'$p_dir' is a directory");
+ return 1;
+ }
+
+ // ----- Extract parent directory
+ $p_parent_dir = dirname($p_dir);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Parent directory is '$p_parent_dir'");
+
+ // ----- Just a check
+ if ($p_parent_dir != $p_dir)
+ {
+ // ----- Look for parent directory
+ if ($p_parent_dir != "")
+ {
+ if (($v_result = $this->privDirCheck($p_parent_dir)) != 1)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ }
+ }
+
+ // ----- Create the directory
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Create directory '$p_dir'");
+ if (!@mkdir($p_dir, 0777))
+ {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_DIR_CREATE_FAIL, "Unable to create directory '$p_dir'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result, "Directory '$p_dir' created");
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privMerge()
+ // Description :
+ // If $p_archive_to_add does not exist, the function exit with a success result.
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privMerge(&$p_archive_to_add)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privMerge", "archive='".$p_archive_to_add->zipname."'");
+ $v_result=1;
+
+ // ----- Look if the archive_to_add exists
+ if (!is_file($p_archive_to_add->zipname))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Archive to add does not exist. End of merge.");
+
+ // ----- Nothing to merge, so merge is a success
+ $v_result = 1;
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Look if the archive exists
+ if (!is_file($this->zipname))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Archive does not exist, duplicate the archive_to_add.");
+
+ // ----- Do a duplicate
+ $v_result = $this->privDuplicate($p_archive_to_add->zipname);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Open the zip file
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode");
+ if (($v_result=$this->privOpenFd('rb')) != 1)
+ {
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Read the central directory informations
+ $v_central_dir = array();
+ if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
+ {
+ $this->privCloseFd();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Go to beginning of File
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in zip : ".ftell($this->zip_fd)."'");
+ @rewind($this->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in zip : ".ftell($this->zip_fd)."'");
+
+ // ----- Open the archive_to_add file
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open archive_to_add in binary read mode");
+ if (($v_result=$p_archive_to_add->privOpenFd('rb')) != 1)
+ {
+ $this->privCloseFd();
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Read the central directory informations
+ $v_central_dir_to_add = array();
+ if (($v_result = $p_archive_to_add->privReadEndCentralDir($v_central_dir_to_add)) != 1)
+ {
+ $this->privCloseFd();
+ $p_archive_to_add->privCloseFd();
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Go to beginning of File
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in archive_to_add : ".ftell($p_archive_to_add->zip_fd)."'");
+ @rewind($p_archive_to_add->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in archive_to_add : ".ftell($p_archive_to_add->zip_fd)."'");
+
+ // ----- Creates a temporay file
+ $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp';
+
+ // ----- Open the temporary file in write mode
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode");
+ if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0)
+ {
+ $this->privCloseFd();
+ $p_archive_to_add->privCloseFd();
+
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Copy the files from the archive to the temporary file
+ // TBC : Here I should better append the file and go back to erase the central dir
+ $v_size = $v_central_dir['offset'];
+ while ($v_size != 0)
+ {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes");
+ $v_buffer = fread($this->zip_fd, $v_read_size);
+ @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+
+ // ----- Copy the files from the archive_to_add into the temporary file
+ $v_size = $v_central_dir_to_add['offset'];
+ while ($v_size != 0)
+ {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes");
+ $v_buffer = fread($p_archive_to_add->zip_fd, $v_read_size);
+ @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+
+ // ----- Store the offset of the central dir
+ $v_offset = @ftell($v_zip_temp_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "New offset of central dir : $v_offset");
+
+ // ----- Copy the block of file headers from the old archive
+ $v_size = $v_central_dir['size'];
+ while ($v_size != 0)
+ {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes");
+ $v_buffer = @fread($this->zip_fd, $v_read_size);
+ @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+
+ // ----- Copy the block of file headers from the archive_to_add
+ $v_size = $v_central_dir_to_add['size'];
+ while ($v_size != 0)
+ {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes");
+ $v_buffer = @fread($p_archive_to_add->zip_fd, $v_read_size);
+ @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+
+ // ----- Merge the file comments
+ $v_comment = $v_central_dir['comment'].' '.$v_central_dir_to_add['comment'];
+
+ // ----- Calculate the size of the (new) central header
+ $v_size = @ftell($v_zip_temp_fd)-$v_offset;
+
+ // ----- Swap the file descriptor
+ // Here is a trick : I swap the temporary fd with the zip fd, in order to use
+ // the following methods on the temporary fil and not the real archive fd
+ $v_swap = $this->zip_fd;
+ $this->zip_fd = $v_zip_temp_fd;
+ $v_zip_temp_fd = $v_swap;
+
+ // ----- Create the central dir footer
+ if (($v_result = $this->privWriteCentralHeader($v_central_dir['entries']+$v_central_dir_to_add['entries'], $v_size, $v_offset, $v_comment)) != 1)
+ {
+ $this->privCloseFd();
+ $p_archive_to_add->privCloseFd();
+ @fclose($v_zip_temp_fd);
+ $this->zip_fd = null;
+
+ // ----- Reset the file list
+ unset($v_header_list);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Swap back the file descriptor
+ $v_swap = $this->zip_fd;
+ $this->zip_fd = $v_zip_temp_fd;
+ $v_zip_temp_fd = $v_swap;
+
+ // ----- Close
+ $this->privCloseFd();
+ $p_archive_to_add->privCloseFd();
+
+ // ----- Close the temporary file
+ @fclose($v_zip_temp_fd);
+
+ // ----- Delete the zip file
+ // TBC : I should test the result ...
+ @unlink($this->zipname);
+
+ // ----- Rename the temporary file
+ // TBC : I should test the result ...
+ //@rename($v_zip_temp_name, $this->zipname);
+ PclZipUtilRename($v_zip_temp_name, $this->zipname);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privDuplicate()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privDuplicate($p_archive_filename)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privDuplicate", "archive_filename='$p_archive_filename'");
+ $v_result=1;
+
+ // ----- Look if the $p_archive_filename exists
+ if (!is_file($p_archive_filename))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Archive to duplicate does not exist. End of duplicate.");
+
+ // ----- Nothing to duplicate, so duplicate is a success.
+ $v_result = 1;
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Open the zip file
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode");
+ if (($v_result=$this->privOpenFd('wb')) != 1)
+ {
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Open the temporary file in write mode
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode");
+ if (($v_zip_temp_fd = @fopen($p_archive_filename, 'rb')) == 0)
+ {
+ $this->privCloseFd();
+
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive file \''.$p_archive_filename.'\' in binary write mode');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Copy the files from the archive to the temporary file
+ // TBC : Here I should better append the file and go back to erase the central dir
+ $v_size = filesize($p_archive_filename);
+ while ($v_size != 0)
+ {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Read $v_read_size bytes");
+ $v_buffer = fread($v_zip_temp_fd, $v_read_size);
+ @fwrite($this->zip_fd, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+
+ // ----- Close
+ $this->privCloseFd();
+
+ // ----- Close the temporary file
+ @fclose($v_zip_temp_fd);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privErrorLog()
+ // Description :
+ // Parameters :
+ // --------------------------------------------------------------------------------
+ function privErrorLog($p_error_code=0, $p_error_string='')
+ {
+ if (PCLZIP_ERROR_EXTERNAL == 1) {
+ PclError($p_error_code, $p_error_string);
+ }
+ else {
+ $this->error_code = $p_error_code;
+ $this->error_string = $p_error_string;
+ }
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privErrorReset()
+ // Description :
+ // Parameters :
+ // --------------------------------------------------------------------------------
+ function privErrorReset()
+ {
+ if (PCLZIP_ERROR_EXTERNAL == 1) {
+ PclErrorReset();
+ }
+ else {
+ $this->error_code = 0;
+ $this->error_string = '';
+ }
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privDecrypt()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privDecrypt($p_encryption_header, &$p_buffer, $p_size, $p_crc)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privDecrypt', "size=".$p_size."");
+ $v_result=1;
+
+ // ----- To Be Modified ;-)
+ $v_pwd = "test";
+
+ $p_buffer = PclZipUtilZipDecrypt($p_buffer, $p_size, $p_encryption_header,
+ $p_crc, $v_pwd);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privDisableMagicQuotes()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privDisableMagicQuotes()
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privDisableMagicQuotes', "");
+ $v_result=1;
+
+ // ----- Look if function exists
+ if ( (!function_exists("get_magic_quotes_runtime"))
+ || (!function_exists("set_magic_quotes_runtime"))) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Functions *et_magic_quotes_runtime are not supported");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Look if already done
+ if ($this->magic_quotes_status != -1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "magic_quote already disabled");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Get and memorize the magic_quote value
+ $this->magic_quotes_status = @get_magic_quotes_runtime();
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Current magic_quotes_runtime status is '".($this->magic_quotes_status==0?'disable':'enable')."'");
+
+ // ----- Disable magic_quotes
+ if ($this->magic_quotes_status == 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Disable magic_quotes");
+ @set_magic_quotes_runtime(0);
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privSwapBackMagicQuotes()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privSwapBackMagicQuotes()
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privSwapBackMagicQuotes', "");
+ $v_result=1;
+
+ // ----- Look if function exists
+ if ( (!function_exists("get_magic_quotes_runtime"))
+ || (!function_exists("set_magic_quotes_runtime"))) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Functions *et_magic_quotes_runtime are not supported");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Look if something to do
+ if ($this->magic_quotes_status != -1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "magic_quote not modified");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Swap back magic_quotes
+ if ($this->magic_quotes_status == 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Enable back magic_quotes");
+ @set_magic_quotes_runtime($this->magic_quotes_status);
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ }
+ // End of class
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : PclZipUtilPathReduction()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function PclZipUtilPathReduction($p_dir)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZipUtilPathReduction", "dir='$p_dir'");
+ $v_result = "";
+
+ // ----- Look for not empty path
+ if ($p_dir != "") {
+ // ----- Explode path by directory names
+ $v_list = explode("/", $p_dir);
+
+ // ----- Study directories from last to first
+ $v_skip = 0;
+ for ($i=sizeof($v_list)-1; $i>=0; $i--) {
+ // ----- Look for current path
+ if ($v_list[$i] == ".") {
+ // ----- Ignore this directory
+ // Should be the first $i=0, but no check is done
+ }
+ else if ($v_list[$i] == "..") {
+ $v_skip++;
+ }
+ else if ($v_list[$i] == "") {
+ // ----- First '/' i.e. root slash
+ if ($i == 0) {
+ $v_result = "/".$v_result;
+ if ($v_skip > 0) {
+ // ----- It is an invalid path, so the path is not modified
+ // TBC
+ $v_result = $p_dir;
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Invalid path is unchanged");
+ $v_skip = 0;
+ }
+ }
+ // ----- Last '/' i.e. indicates a directory
+ else if ($i == (sizeof($v_list)-1)) {
+ $v_result = $v_list[$i];
+ }
+ // ----- Double '/' inside the path
+ else {
+ // ----- Ignore only the double '//' in path,
+ // but not the first and last '/'
+ }
+ }
+ else {
+ // ----- Look for item to skip
+ if ($v_skip > 0) {
+ $v_skip--;
+ }
+ else {
+ $v_result = $v_list[$i].($i!=(sizeof($v_list)-1)?"/".$v_result:"");
+ }
+ }
+ }
+
+ // ----- Look for skip
+ if ($v_skip > 0) {
+ while ($v_skip > 0) {
+ $v_result = '../'.$v_result;
+ $v_skip--;
+ }
+ }
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : PclZipUtilPathInclusion()
+ // Description :
+ // This function indicates if the path $p_path is under the $p_dir tree. Or,
+ // said in an other way, if the file or sub-dir $p_path is inside the dir
+ // $p_dir.
+ // The function indicates also if the path is exactly the same as the dir.
+ // This function supports path with duplicated '/' like '//', but does not
+ // support '.' or '..' statements.
+ // Parameters :
+ // Return Values :
+ // 0 if $p_path is not inside directory $p_dir
+ // 1 if $p_path is inside directory $p_dir
+ // 2 if $p_path is exactly the same as $p_dir
+ // --------------------------------------------------------------------------------
+ function PclZipUtilPathInclusion($p_dir, $p_path)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZipUtilPathInclusion", "dir='$p_dir', path='$p_path'");
+ $v_result = 1;
+
+ // ----- Look for path beginning by ./
+ if ( ($p_dir == '.')
+ || ((strlen($p_dir) >=2) && (substr($p_dir, 0, 2) == './'))) {
+ $p_dir = PclZipUtilTranslateWinPath(getcwd(), FALSE).'/'.substr($p_dir, 1);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Replacing ./ by full path in p_dir '".$p_dir."'");
+ }
+ if ( ($p_path == '.')
+ || ((strlen($p_path) >=2) && (substr($p_path, 0, 2) == './'))) {
+ $p_path = PclZipUtilTranslateWinPath(getcwd(), FALSE).'/'.substr($p_path, 1);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Replacing ./ by full path in p_path '".$p_path."'");
+ }
+
+ // ----- Explode dir and path by directory separator
+ $v_list_dir = explode("/", $p_dir);
+ $v_list_dir_size = sizeof($v_list_dir);
+ $v_list_path = explode("/", $p_path);
+ $v_list_path_size = sizeof($v_list_path);
+
+ // ----- Study directories paths
+ $i = 0;
+ $j = 0;
+ while (($i < $v_list_dir_size) && ($j < $v_list_path_size) && ($v_result)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Working on dir($i)='".$v_list_dir[$i]."' and path($j)='".$v_list_path[$j]."'");
+
+ // ----- Look for empty dir (path reduction)
+ if ($v_list_dir[$i] == '') {
+ $i++;
+ continue;
+ }
+ if ($v_list_path[$j] == '') {
+ $j++;
+ continue;
+ }
+
+ // ----- Compare the items
+ if (($v_list_dir[$i] != $v_list_path[$j]) && ($v_list_dir[$i] != '') && ( $v_list_path[$j] != '')) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Items ($i,$j) are different");
+ $v_result = 0;
+ }
+
+ // ----- Next items
+ $i++;
+ $j++;
+ }
+
+ // ----- Look if everything seems to be the same
+ if ($v_result) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Look for tie break");
+ // ----- Skip all the empty items
+ while (($j < $v_list_path_size) && ($v_list_path[$j] == '')) $j++;
+ while (($i < $v_list_dir_size) && ($v_list_dir[$i] == '')) $i++;
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Looking on dir($i)='".($i < $v_list_dir_size?$v_list_dir[$i]:'')."' and path($j)='".($j < $v_list_path_size?$v_list_path[$j]:'')."'");
+
+ if (($i >= $v_list_dir_size) && ($j >= $v_list_path_size)) {
+ // ----- There are exactly the same
+ $v_result = 2;
+ }
+ else if ($i < $v_list_dir_size) {
+ // ----- The path is shorter than the dir
+ $v_result = 0;
+ }
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : PclZipUtilCopyBlock()
+ // Description :
+ // Parameters :
+ // $p_mode : read/write compression mode
+ // 0 : src & dest normal
+ // 1 : src gzip, dest normal
+ // 2 : src normal, dest gzip
+ // 3 : src & dest gzip
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function PclZipUtilCopyBlock($p_src, $p_dest, $p_size, $p_mode=0)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZipUtilCopyBlock", "size=$p_size, mode=$p_mode");
+ $v_result = 1;
+
+ if ($p_mode==0)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Src offset before read :".(@ftell($p_src)));
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Dest offset before write :".(@ftell($p_dest)));
+ while ($p_size != 0)
+ {
+ $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes");
+ $v_buffer = @fread($p_src, $v_read_size);
+ @fwrite($p_dest, $v_buffer, $v_read_size);
+ $p_size -= $v_read_size;
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Src offset after read :".(@ftell($p_src)));
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Dest offset after write :".(@ftell($p_dest)));
+ }
+ else if ($p_mode==1)
+ {
+ while ($p_size != 0)
+ {
+ $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes");
+ $v_buffer = @gzread($p_src, $v_read_size);
+ @fwrite($p_dest, $v_buffer, $v_read_size);
+ $p_size -= $v_read_size;
+ }
+ }
+ else if ($p_mode==2)
+ {
+ while ($p_size != 0)
+ {
+ $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes");
+ $v_buffer = @fread($p_src, $v_read_size);
+ @gzwrite($p_dest, $v_buffer, $v_read_size);
+ $p_size -= $v_read_size;
+ }
+ }
+ else if ($p_mode==3)
+ {
+ while ($p_size != 0)
+ {
+ $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes");
+ $v_buffer = @gzread($p_src, $v_read_size);
+ @gzwrite($p_dest, $v_buffer, $v_read_size);
+ $p_size -= $v_read_size;
+ }
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : PclZipUtilRename()
+ // Description :
+ // This function tries to do a simple rename() function. If it fails, it
+ // tries to copy the $p_src file in a new $p_dest file and then unlink the
+ // first one.
+ // Parameters :
+ // $p_src : Old filename
+ // $p_dest : New filename
+ // Return Values :
+ // 1 on success, 0 on failure.
+ // --------------------------------------------------------------------------------
+ function PclZipUtilRename($p_src, $p_dest)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZipUtilRename", "source=$p_src, destination=$p_dest");
+ $v_result = 1;
+
+ // ----- Try to rename the files
+ if (!@rename($p_src, $p_dest)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Fail to rename file, try copy+unlink");
+
+ // ----- Try to copy & unlink the src
+ if (!@copy($p_src, $p_dest)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Fail to copy file");
+ $v_result = 0;
+ }
+ else if (!@unlink($p_src)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Fail to unlink old filename");
+ $v_result = 0;
+ }
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : PclZipUtilOptionText()
+ // Description :
+ // Translate option value in text. Mainly for debug purpose.
+ // Parameters :
+ // $p_option : the option value.
+ // Return Values :
+ // The option text value.
+ // --------------------------------------------------------------------------------
+ function PclZipUtilOptionText($p_option)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZipUtilOptionText", "option='".$p_option."'");
+
+ $v_list = get_defined_constants();
+ for (reset($v_list); $v_key = key($v_list); next($v_list)) {
+ $v_prefix = substr($v_key, 0, 10);
+ if (( ($v_prefix == 'PCLZIP_OPT')
+ || ($v_prefix == 'PCLZIP_CB_')
+ || ($v_prefix == 'PCLZIP_ATT'))
+ && ($v_list[$v_key] == $p_option)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_key);
+ return $v_key;
+ }
+ }
+
+ $v_result = 'Unknown';
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : PclZipUtilTranslateWinPath()
+ // Description :
+ // Translate windows path by replacing '\' by '/' and optionally removing
+ // drive letter.
+ // Parameters :
+ // $p_path : path to translate.
+ // $p_remove_disk_letter : true | false
+ // Return Values :
+ // The path translated.
+ // --------------------------------------------------------------------------------
+ function PclZipUtilTranslateWinPath($p_path, $p_remove_disk_letter=true)
+ {
+ if (stristr(php_uname(), 'windows')) {
+ // ----- Look for potential disk letter
+ if (($p_remove_disk_letter) && (($v_position = strpos($p_path, ':')) != false)) {
+ $p_path = substr($p_path, $v_position+1);
+ }
+ // ----- Change potential windows directory separator
+ if ((strpos($p_path, '\\') > 0) || (substr($p_path, 0,1) == '\\')) {
+ $p_path = strtr($p_path, '\\', '/');
+ }
+ }
+ return $p_path;
+ }
+ // --------------------------------------------------------------------------------
+
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/inc/repo.class.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/inc/repo.class.php
new file mode 100644
index 000000000..04dc75675
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/inc/repo.class.php
@@ -0,0 +1,51 @@
+<?php
+class repo_indexmenu_plugin {
+ /**
+ * Send a zipped theme
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+
+ function send_theme ($file) {
+ require_once(DOKU_PLUGIN.'indexmenu/syntax/indexmenu.php');
+ $idxm=new syntax_plugin_indexmenu_indexmenu();
+ //clean the file name
+ $file=cleanID($file);
+ //check config
+ if(!$idxm->getConf('be_repo') || empty($file)) return false;
+ $repodir=INDEXMENU_IMG_ABSDIR."/repository";
+ $zipfile=$repodir."/$file.zip";
+ $localtheme=INDEXMENU_IMG_ABSDIR."/$file/";
+ //theme does not exists
+ if (!file_exists($localtheme)) return false;
+ if (!io_mkdir_p($repodir)) return false;
+ $lm=@filemtime($zipfile);
+ //no cached zip or older than 1 day
+ if ($lm < time()-(60*60*24)) {
+ //create the zip
+ require_once(DOKU_PLUGIN."indexmenu/inc/pclzip.lib.php");
+ @unlink($zipfile);
+ $zip=new PclZip($zipfile);
+ $status=$zip->add($localtheme,PCLZIP_OPT_REMOVE_ALL_PATH);
+ //error
+ if ($status == 0) return false;
+ }
+ $len = (int) filesize($zipfile);
+ //don't send large zips
+ if ($len > 2*1024*1024) return false;
+ //headers
+ header('Cache-Control: must-revalidate, no-transform, post-check=0, pre-check=0');
+ header('Pragma: public');
+ header('Content-Type: application/zip');
+ header('Content-Disposition: attachment; filename="'.basename($zipfile).'";');
+ header("Content-Transfer-Encoding: binary");
+ //send zip
+ $fp=@fopen($zipfile, 'rb');
+ if ($fp) {
+ $ct=@fread($fp, $len);
+ print $ct;
+ }
+ @fclose($fp);
+ return true;
+ }
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu-full.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu-full.js
new file mode 100644
index 000000000..7c60ceffe
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu-full.js
@@ -0,0 +1,640 @@
+/*----------------------------------------------------|
+ | dTree 2.05 | www.destroydrop.com/javascript/tree/ |
+ |---------------------------------------------------|
+ | Copyright (c) 2002-2003 Geir Landro |
+ | |
+ | This script can be used freely as long as all |
+ | copyright messages are intact. |
+ | |
+ | Updated: 17.04.2003 |
+ |---------------------------------------------------|
+ | Modified for Dokuwiki by |
+ | Samuele Tognini <samuele@netsons.org> |
+ | under GPL 2 license |
+ | (http://www.gnu.org/licenses/gpl.html) |
+ | Updated: 29.08.2009 |
+ |---------------------------------------------------|
+ | indexmenu | wiki.splitbrain.org/plugin:indexmenu |
+ |--------------------------------------------------*/
+
+// Node object
+function Node(dokuid, id, pid, name, hns, isdir, ajax) {
+ this.dokuid = dokuid;
+ this.id = id;
+ this.pid = pid;
+ this.name = name;
+ this.hns = hns;
+ this.isdir = isdir;
+ this.ajax = ajax;
+ this._io = 0;
+ this._is = false;
+ this._ls = false;
+ this._hc = ajax;
+ this._ai = 0;
+ this._p = false;
+ this._lv = 0;
+ this._ok = false;
+ this._cp=false;
+}
+// Tree object
+function dTree(objName,theme) {
+ var objExt = indexmenu_findExt(theme);
+ this.config = {
+ urlbase:DOKU_BASE+'doku.php?id=',
+ plugbase:DOKU_BASE+'lib/plugins/indexmenu',
+ useCookies: true,
+ scroll:true,
+ toc:true,
+ maxjs:1,
+ jsajax:'',
+ sepchar:':',
+ theme:theme
+ };
+ var objImg=this.config.plugbase+'/images/'+theme+'/';
+ this.icon = {
+ root: objImg + 'base.'+objExt,
+ folder: objImg + 'folder.'+objExt,
+ folderH: objImg + 'folderh.'+objExt,
+ folderOpen: objImg + 'folderopen.'+objExt,
+ folderHOpen: objImg + 'folderhopen.'+objExt,
+ node: objImg + 'page.'+objExt,
+ empty: objImg + 'empty.'+objExt,
+ line: objImg + 'line.'+objExt,
+ join: objImg + 'join.'+objExt,
+ joinBottom: objImg + 'joinbottom.'+objExt,
+ plus: objImg + 'plus.'+objExt,
+ plusBottom: objImg + 'plusbottom.'+objExt,
+ minus: objImg + 'minus.'+objExt,
+ minusBottom: objImg + 'minusbottom.'+objExt,
+ nlPlus: objImg + 'nolines_plus.'+objExt,
+ nlMinus: objImg + 'nolines_minus.'+objExt
+ };
+ this.obj = objName;
+ this.aNodes = [];
+ this.aIndent = [];
+ this.root = new Node(false,-1);
+ this.selectedNode = null;
+ this.selectedFound = false;
+ this.completed = false;
+ this.scrllTmr=0;
+ this.pageid=window.indexmenu_ID||'';
+ this.fajax=false;
+}
+
+// Adds a new node to the node array
+dTree.prototype.add = function(dokuid, id, pid, name, hns, isdir, ajax) {
+ this.aNodes[this.aNodes.length] = new Node(dokuid, id, pid, name, hns, isdir, ajax);
+};
+
+// Open/close all nodes
+dTree.prototype.openAll = function() {
+ if (!this.getCookie('co' + this.obj)) {
+ this.oAll(true);
+ }
+};
+
+// Outputs the tree to the page
+dTree.prototype.toString = function() {
+ var str='';
+ if (this.config.scroll) {str += '<div id="cdtree_'+this.obj+'" class="dtree" style="position:relative;overflow:hidden;width:100%;">';}
+ str += '<div id="dtree_'+this.obj+'" class="dtree '+this.config.theme+'" style="overflow:';
+ if (this.config.scroll) { str += 'visible;position:relative;width:100%"';} else {str += 'hidden;"';}
+ str += '>';
+ if (DOKUid('dtree_'+this.obj)) {str += '<div class="error">Indexmenu id conflict</div>';}
+ if (this.config.toc) {
+ str += '<div id="t' + this.obj + '" class="indexmenu_tocbullet '+this.config.theme+'" style="display:none;" title="Table of contents"></div>';
+ str += '<div id="toc_' + this.obj + '" style="display:none;"></div>';
+ }
+ if (this.config.useCookies) { this.selectedNode = this.getSelected(); }
+ str += this.addNode(this.root)+'</div>';
+ if (this.config.scroll) {
+ str += '<div id="z' + this.obj + '" class="indexmenu_rarrow"></div>';
+ str += '<div id="left_'+this.obj+'" class="indexmenu_larrow" style="display:none;" title="Click to scroll back" onmousedown="javascript:'+this.obj+'.scroll(\'r\',1);" onmouseup="javascript:'+this.obj+'.stopscroll();"></div>';
+ str += '</div>';
+ }
+ this.completed = true;
+ this.divdisplay('nojs_',0);
+ return str;
+};
+
+// Creates the tree structure
+dTree.prototype.addNode = function(pNode) {
+ var str = '',cn,n=pNode._ai,l=pNode._lv+1;
+ for (n; n<this.aNodes.length; n++) {
+ if (this.aNodes[n].pid == pNode.id) {
+ cn = this.aNodes[n];
+ cn._p = pNode;
+ cn._ai = n;
+ cn._lv=l;
+ this.setCS(cn);
+ if (cn._hc && !cn._io && this.config.useCookies) {cn._io = this.isOpen(cn.id);}
+ if (this.pageid == (!cn.hns && cn.dokuid || cn.hns)) {
+ cn._cp=true;
+ } else if (cn.id == this.selectedNode && !this.selectedFound) {
+ cn._is = true;
+ this.selectedNode = n;
+ this.selectedFound = true;
+ }
+ if (!cn._hc && cn.isdir && !cn.ajax && !cn.hns) {
+ if (cn._ls) {str += this.noderr(cn, n);}
+ } else {
+ str += this.node(cn, n);
+ }
+ if (cn._ls) {break;}
+ }
+ }
+ return str;
+};
+
+dTree.prototype.noderr = function(node, nodeId) {
+ var str = '<div class="dTreeNode">' + this.indent(node, nodeId);
+ str += '<div class="emptynode" title="Empty"></div></div>';
+ return str;
+};
+
+// Creates the node icon, url and text
+dTree.prototype.node = function(node, nodeId) {
+ var h=1,jsfnc,str;
+ jsfnc='onmouseover="'+this.obj+'.show_feat(\''+nodeId+'\');" onmousedown="return indexmenu_checkcontextm(\''+nodeId+'\','+this.obj+',event);" oncontextmenu="return indexmenu_stopevt(event)"';
+ if (node._lv > this.config.maxjs) {h=0;} else {node._ok=true;}
+ str = '<div class="dTreeNode">' + this.indent(node, nodeId);
+ node.icon = (this.root.id == node.pid) ? this.icon.root : ((node.hns) ? this.icon.folderH : ((node._hc) ? this.icon.folder : this.icon.node));
+ node.iconOpen = (node._hc) ? ((node.hns) ? this.icon.folderHOpen : this.icon.folderOpen) : this.icon.node;
+ if (this.root.id == node.pid) {
+ node.icon = this.icon.root;
+ node.iconOpen = this.icon.root;
+ }
+ str += '<img id="i' + this.obj + nodeId + '" src="' + ((node._io) ? node.iconOpen : node.icon) + '" alt="" />';
+ if (!node._hc || node.hns) {
+ str += '<a id="s' + this.obj + nodeId + '" class="' + ((node._cp) ? 'navSel' : ((node._is) ? 'nodeSel' : (node._hc) ? 'nodeFdUrl' : 'nodeUrl')) ;
+ str += '" href="' + this.config.urlbase;
+ (node.hns) ? str +=node.hns : str += node.dokuid;
+ str += '"' + ' title="' + node.name + '"' +jsfnc;
+ str += ' onclick="javascript: ' + this.obj + '.s(' + nodeId + ');"';
+ str += '>'+node.name+'</a>';
+ }
+ else if (node.pid != this.root.id) {
+ str += '<a id="s' + this.obj + nodeId + '" href="javascript: ' + this.obj + '.o(' + nodeId + '); " class="node"' + jsfnc + '>'+node.name+'</a>';
+ } else {
+ str += node.name;
+ }
+ str += '</div>';
+ if (node._hc) {
+ str += '<div id="d' + this.obj + nodeId + '" class="clip" style="display:' + ((this.root.id == node.pid || node._io) ? 'block' : 'none') + ';">';
+ if (h) {str += this.addNode(node);}
+ str += '</div>';
+ }
+ this.aIndent.pop();
+ return str;
+};
+
+// Adds the empty and line icons
+dTree.prototype.indent = function(node, nodeId) {
+ var n,str = '';
+ if (this.root.id != node.pid) {
+ for (n=0; n<this.aIndent.length; n++) {
+ str += '<img src="' + ( (this.aIndent[n] == 1) ? this.icon.line : this.icon.empty ) + '" alt="" />';
+ }
+ if (node._ls) {
+ this.aIndent.push(0);
+ } else {
+ this.aIndent.push(1);
+ }
+ if (node._hc) {
+ str += '<a href="javascript: ' + this.obj + '.o(' + nodeId+');"><img id="j' + this.obj + nodeId + '" src="';
+ str += ( (node._io) ? ((node._ls) ? this.icon.minusBottom : this.icon.minus) : ((node._ls) ? this.icon.plusBottom : this.icon.plus ) );
+ str += '" alt="" /></a>';
+ } else {str += '<img src="' + ((node._ls) ? this.icon.joinBottom : this.icon.join) + '" alt="" />';}
+ }
+ return str;
+};
+
+// Checks if a node has any children and if it is the last sibling
+dTree.prototype.setCS = function(node) {
+ var lastId,n;
+ for (n=0; n<this.aNodes.length; n++) {
+ if (this.aNodes[n].pid == node.id) {node._hc = true;}
+ if (this.aNodes[n].pid == node.pid) {lastId = this.aNodes[n].id;}
+ }
+ if (lastId==node.id) {node._ls = true;}
+};
+
+// Returns the selected node
+dTree.prototype.getSelected = function() {
+ var sn = this.getCookie('cs' + this.obj);
+ return (sn) ? sn : null;
+};
+
+// Highlights the selected node
+dTree.prototype.s = function(id) {
+ var eOld,eNew,cn = this.aNodes[id];
+ if (this.selectedNode != id) {
+ eNew = DOKUid("s" + this.obj + id);
+ if (!eNew ) {return;}
+ if (this.selectedNode || this.selectedNode===0) {
+ eOld = DOKUid("s" + this.obj + this.selectedNode);
+ eOld.className = "node";
+ }
+ eNew.className = "nodeSel";
+ this.selectedNode = id;
+ if (this.config.useCookies) {this.setCookie('cs' + this.obj, cn.id);}
+ }
+};
+
+// Toggle Open or close
+dTree.prototype.o = function(id) {
+ var cn = this.aNodes[id];
+ this.nodeStatus(!cn._io, id, cn._ls);
+ cn._io = !cn._io;
+ if (this.config.useCookies) {this.updateCookie();}
+ this.divdisplay('z',0);
+ this.resizescroll("block");
+};
+
+// Open or close all nodes
+dTree.prototype.oAll = function(status) {
+ for (var n=0; n<this.aNodes.length; n++) {
+ if (this.aNodes[n]._hc && this.aNodes[n].pid != this.root.id) {
+ this.nodeStatus(status, n, this.aNodes[n]._ls);
+ this.aNodes[n]._io = status;
+ }
+ }
+ if (this.config.useCookies) {this.updateCookie();}
+};
+
+// Opens the tree to a specific node
+dTree.prototype.openTo = function(nId, bSelect, bFirst) {
+ var n,cn;
+ if (!bFirst) {
+ for (n=0; n<this.aNodes.length; n++) {
+ if (this.aNodes[n].id == nId) {
+ nId=n;
+ break;
+ }
+ }
+ }
+ this.fill(this.aNodes[nId].pid);
+ cn=this.aNodes[nId];
+ if (cn.pid==this.root.id || !cn._p) {return;}
+ cn._io = 1;
+ if (this.completed && cn._hc) {this.nodeStatus(true, cn._ai, cn._ls);}
+ if (cn._is) {
+ (this.completed) ? this.s(cn._ai) : this._sn=cn._ai;
+ }
+ this.openTo(cn._p._ai, false, true);
+};
+
+dTree.prototype.getOpenTo = function(nodes) {
+ if (nodes === '') {
+ this.openAll();
+ } else if (!this.config.useCookies ||!this.getCookie('co' + this.obj)) {
+ for (var n=0; n<nodes.length; n++) {
+ this.openTo(nodes[n],false,true);
+ }
+ }
+};
+
+// Change the status of a node(open or closed)
+dTree.prototype.nodeStatus = function(status, id, bottom) {
+ if (status && !this.fill(id)) {return;}
+ var eJoin,eIcon;
+ eJoin= DOKUid('j' + this.obj + id);
+ eIcon= DOKUid('i' + this.obj + id);
+ eIcon.src = (status) ? this.aNodes[id].iconOpen : this.aNodes[id].icon;
+ eJoin.src = ((status)?((bottom)?this.icon.minusBottom:this.icon.minus):((bottom)?this.icon.plusBottom:this.icon.plus));
+ DOKUid('d' + this.obj + id).style.display = (status) ? 'block': 'none';
+};
+
+// [Cookie] Clears a cookie
+dTree.prototype.clearCookie = function() {
+ var now,yday;
+ now = new Date();
+ yday = new Date(now.getTime() - 1000 * 60 * 60 * 24);
+ this.setCookie('co'+this.obj, 'cookieValue', yday);
+ this.setCookie('cs'+this.obj, 'cookieValue', yday);
+};
+
+// [Cookie] Sets value in a cookie
+dTree.prototype.setCookie = function(cookieName, cookieValue, expires, path, domain, secure) {
+ document.cookie =
+ escape(cookieName) + '=' + escape(cookieValue) +
+ (expires ? '; expires=' + expires.toGMTString() : '') +
+ ';path=/' +
+ (domain ? '; domain=' + domain : '') +
+ (secure ? '; secure' : '');
+};
+
+// [Cookie] Gets a value from a cookie
+dTree.prototype.getCookie = function(cookieName) {
+ var cookieValue = '',pN,posValue,endPos;
+ pN = document.cookie.indexOf(escape(cookieName) + '=');
+ if (pN != -1) {
+ posValue = pN + (escape(cookieName) + '=').length;
+ endPos = document.cookie.indexOf(';', posValue);
+ if (endPos != -1) {cookieValue = unescape(document.cookie.substring(posValue, endPos));}
+ else {cookieValue = unescape(document.cookie.substring(posValue));}
+ }
+ return (cookieValue);
+};
+
+// [Cookie] Returns ids of open nodes as a string
+dTree.prototype.updateCookie = function() {
+ var str = '',n;
+ for (n=0; n<this.aNodes.length; n++) {
+ if (this.aNodes[n]._io && this.aNodes[n].pid != this.root.id) {
+ if (str) {str += '.';}
+ str += this.aNodes[n].id;
+ }
+ }
+ this.setCookie('co' + this.obj, str);
+};
+
+// [Cookie] Checks if a node id is in a cookie
+dTree.prototype.isOpen = function(id) {
+ var n,aOpen = this.getCookie('co' + this.obj).split('.');
+ for (n=0; n<aOpen.length; n++){
+ if (aOpen[n] == id) {return true;}
+ }
+ return false;
+};
+
+dTree.prototype.openCurNS = function (max){
+ var r,cn,match,t,i,n,cnsa,cna,cns=this.pageid;
+ r=new RegExp ("\\b"+this.config.sepchar+"\\b","g");
+ match=cns.match(r)||-1;
+ if (max>0 && match.length >= max) {
+ t = cns.split(this.config.sepchar);
+ n = (this.aNodes[0].dokuid == '') ? 0 :this.aNodes[0].dokuid.split(this.config.sepchar).length;
+ t.splice(max + n,t.length);
+ cnsa=t.join(this.config.sepchar);
+ }
+ for (i=0; i<this.aNodes.length; i++){
+ cn=this.aNodes[i];
+ if (cns == cn.dokuid || cns == cn.hns) {
+ this.openTo(cn.id,false,true);
+ this.fajax=false;
+ if (cn.pid >= 0) {
+ addInitEvent(this.scroll("l",4,cn.pid,1));
+ }
+ break;
+ }
+ if (cnsa == cn.dokuid || cnsa == cn.hns) {
+ cna=cn;
+ this.fajax=true;
+ }
+ }
+ if (cna) {this.openTo(cna.id,false,true);}
+};
+
+dTree.prototype.fill = function(id) {
+ if (id == -1 || this.aNodes[id]._ok ) {return true;}
+ var n=id,eLoad,node,a,rd,ln,eDiv;
+ if (this.aNodes[n].ajax) {
+ eLoad=DOKUid('l' + this.obj);
+ node=DOKUid('s'+this.obj+n);
+ if (!eLoad) {eLoad=indexmenu_createPicker('l' + this.obj);}
+ eLoad.innerHTML='Loading ...';
+ DOKUid('s'+this.obj+n).parentNode.appendChild(eLoad);
+ eLoad.style.width='auto';
+ eLoad.style.display='inline';
+ this.getAjax(n);
+ return true;
+ }
+ rd = [];
+ while (!this.aNodes[n]._ok) {
+ rd[rd.length]=n;
+ n=this.aNodes[n].pid;
+ }
+ for (ln=rd.length-1; ln>=0; ln--) {
+ id=rd[ln];
+ a=this.aNodes[id];
+ eDiv=DOKUid('d' + this.obj + id);
+ if (!eDiv) {return false;}
+ this.aIndent = [];
+ n=a;
+ while (n.pid>=0) {
+ if (n._ls) {
+ this.aIndent.unshift(0);
+ } else {
+ this.aIndent.unshift(1);
+ }
+ n=n._p;
+ }
+ eDiv.innerHTML=this.addNode(a);
+ a._ok=true;
+ }
+ return true;
+};
+
+dTree.prototype.openCookies = function() {
+ var n,cn,aOpen = this.getCookie('co' + this.obj).split('.');
+ for (n=0; n<aOpen.length; n++){
+ if (aOpen[n] === "") {break;}
+ cn = this.aNodes[aOpen[n]];
+ if (!cn._ok) {this.nodeStatus(true, aOpen[n], cn._ls);cn._io = 1;}
+ }
+};
+
+dTree.prototype.scroll = function (where,s,n,i){
+ if (!this.config.scroll) {return false;}
+ var w,dtree,dtreel,nodeId;
+ dtree=DOKUid('dtree_'+this.obj);
+ dtreel=parseInt(dtree.offsetLeft,0);
+ if (where=="r") {
+ DOKUid('left_'+this.obj).style.border="thin inset";
+ this.scrollRight(dtreel,s);
+ } else {
+ nodeId=DOKUid('s'+this.obj+n);
+ w = parseInt(dtree.parentNode.offsetWidth - nodeId.offsetWidth - nodeId.offsetLeft,0);
+ if (this.config.toc) {w=w-11;}
+ if (dtreel <= w) {return;}
+ this.resizescroll("none");
+ this.stopscroll();
+ this.scrollLeft(dtreel,s,w-3,i);
+ }
+};
+
+dTree.prototype.scrollLeft = function (lft,s,w,i){
+ if(lft < w - i -10) {
+ this.divdisplay('z',0);
+ this.scrllTmr=0;
+ return;
+ }
+ var self=this;
+ DOKUid('dtree_'+self.obj).style.left = lft + "px";
+ this.scrllTmr=setTimeout(function (){self.scrollLeft(lft - s,s+i,w,i);},20);
+};
+
+//Scroll Back
+dTree.prototype.scrollRight = function (lft,s){
+ if(lft >= s) {
+ this.divdisplay('left_',0);
+ this.stopscroll();
+ return;
+ }
+ var self=this;
+ DOKUid('dtree_'+self.obj).style.left = lft + "px";
+ if (lft>-15) {s=1;}
+ this.scrllTmr=setTimeout(function (){self.scrollRight(lft+s,s+1);},20);
+};
+
+dTree.prototype.stopscroll = function (){
+ DOKUid('left_'+this.obj).style.border="none";
+ clearTimeout(this.scrllTmr);
+ this.scrllTmr=0;
+};
+
+dTree.prototype.show_feat = function (n){
+ var w,div,id,dtree,dtreel,self,node=DOKUid('s'+this.obj+n);
+ self=this;
+ if (this.config.toc && node.className != "node") {
+ div=DOKUid('t'+this.obj);
+ id =(this.aNodes[n].hns) ? this.aNodes[n].hns : this.aNodes[n].dokuid;
+ div.onmousedown=function (){indexmenu_createTocMenu('req=toc&id='+decodeURIComponent(id),'picker_'+self.obj,'t'+self.obj);};
+ node.parentNode.appendChild(div);
+ if (div.style.display=="none") {div.style.display="inline";}
+ }
+ if (this.config.scroll) {
+ div=DOKUid('z'+this.obj);
+ div.onmouseover=function(){div.style.border="none";self.scroll("l",1,n,0);};
+ div.onmousedown=function(){div.style.border="thin inset";self.scroll("l",4,n,1);};
+ div.onmouseout=function(){div.style.border="none";self.stopscroll();};
+ div.onmouseup=div.onmouseover;
+ dtree=DOKUid('dtree_'+this.obj);
+ dtreel=parseInt(dtree.offsetLeft,0);
+ w = parseInt(dtree.parentNode.offsetWidth - node.offsetWidth - node.offsetLeft + 1,0);
+ if (dtreel > w) {
+ div.style.display="none";
+ div.style.top = node.offsetTop+"px";
+ div.style.left = parseInt(node.offsetLeft + node.offsetWidth + w - 12,0)+"px";
+ div.style.display="block";
+ }
+ }
+};
+
+dTree.prototype.resizescroll = function (status){
+ var dtree,w,h,left=DOKUid('left_'+this.obj);
+ if (!left) {return;}
+ if (left.style.display==status) {
+ dtree=DOKUid('dtree_'+this.obj);
+ w=parseInt(dtree.offsetHeight/3,0);
+ h= parseInt(w/50,0)*50;
+ if (h < 50) {h=50;}
+ left.style.height=h+"px";
+ left.style.top = w+"px";
+ if (status=="none") {left.style.display="block";}
+ }
+};
+
+// Toggle Open or close
+dTree.prototype.getAjax = function(n) {
+ var node,req,curns,selft=this;
+ node=selft.aNodes[n];
+ // We use SACK to do the AJAX requests
+ var Ajax = new sack(DOKU_BASE+'lib/plugins/indexmenu/ajax.php');
+ req='req=index&idx='+node.dokuid+decodeURIComponent(this.config.jsajax);
+ curns=this.pageid.substring(0,this.pageid.lastIndexOf(this.config.sepchar));
+ Ajax.encodeURIString=false;
+ Ajax.onCompletion = function(){
+ var i,ajxnodes,ajxnode,plus;
+ plus=selft.aNodes.length -1;
+ eval(this.response);
+ if (!isArray(ajxnodes) || ajxnodes.length < 1) {
+ ajxnodes=[['', 1, 0, '', 0, 1, 0]];
+ }
+ node.ajax=false;
+ for(i=0;i<ajxnodes.length;i++){
+ ajxnode=ajxnodes[i];
+ ajxnode[2]=(ajxnode[2]==0) ? node.id : ajxnode[2] + plus;
+ ajxnode[1] += plus;
+ selft.add(ajxnode[0],ajxnode[1],ajxnode[2],ajxnode[3],ajxnode[4],ajxnode[5],ajxnode[6]);
+ }
+ if (selft.fajax) {
+ selft.fajax=false;
+ selft.openCurNS(0);
+ } else {
+ selft.openTo(node.id,false,true);
+ }
+ DOKUid('l'+selft.obj).style.display='none';
+ };
+ if (this.fajax) {
+ req +='&nss='+curns+'&max=1';
+ }
+ Ajax.encodeURIString = false;
+ Ajax.runAJAX(encodeURI(req));
+};
+
+//Load custom css
+dTree.prototype.loadCss = function() {
+ var oLink = document.createElement("link");
+ oLink.href = this.config.plugbase+'/images/'+this.config.theme+'/style.css';
+ oLink.rel = "stylesheet";
+ oLink.type = "text/css";
+ document.getElementsByTagName('head')[0].appendChild(oLink);
+};
+
+//Right click
+dTree.prototype.contextmenu = function(n,e) {
+ var li,id,html,type,node,self,cmenu,cdtree,rmenu,X=0,Y=0,i;
+ cdtree= DOKUid("cdtree_" + this.obj);
+ rmenu=DOKUid('r' + this.obj);
+ if(!rmenu) { return true; }
+ indexmenu_mouseposition(rmenu,e);
+ cmenu=window.indexmenu_contextmenu[0];
+ node =this.aNodes[n];
+ self=this;
+ rmenu.innerHTML='<div class="indexmenu_rmenuhead" title="'+node.name+'">'+node.name+"</div>";
+ for (i=0; i<cmenu.length; i++,i++,i++,i++) {
+ if (((!node._hc || node.hns) && !cmenu[i+2])||(node._hc && !node.hns && !cmenu[i+3])) {continue;}
+ html=cmenu[i];
+ if (cmenu[i+1]) {
+ type='li';
+ id =(node.hns) ? node.hns : node.dokuid;
+ html='<a title="'+cmenu[i]+'" href="'+eval(cmenu[i+1])+'">'+html+'</a>';
+ } else {
+ type='span';
+ rmenu.appendChild(document.createElement('ul'));
+ }
+ li=document.createElement(type);
+ li.innerHTML=html;
+ rmenu.lastChild.appendChild(li);
+ }
+ rmenu.style.display='inline';
+ return false;
+};
+
+dTree.prototype.divdisplay = function(obj,v) {
+ var o=DOKUid(obj+this.obj);
+ if (!o) {return false;}
+ (v) ? o.style.display='inline': o.style.display='none' ;
+};
+
+dTree.prototype.init = function(s,c,n,nav,max) {
+ if (s) {this.loadCss();}
+ if (!c) {this.openCookies();}
+ if (n) {this.getOpenTo(n.split(" "));}
+ if (nav) {this.openCurNS(max);}
+ if (window.indexmenu_contextmenu) {
+ var self = this;
+ indexmenu_createPicker('r'+ this.obj,'indexmenu_rmenu '+this.config.theme);
+ DOKUid('r'+ this.obj).oncontextmenu=indexmenu_stopevt;
+ addEvent(document, 'click', function() {self.divdisplay('r',0);});
+ }
+};
+
+// If Push and pop is not implemented by the browser
+if (!Array.prototype.push) {
+ Array.prototype.push = function array_push() {
+ for(var i=0;i<arguments.length;i++){
+ this[this.length]=arguments[i];
+ }
+ return this.length;
+ };
+}
+if (!Array.prototype.pop) {
+ Array.prototype.pop = function array_pop() {
+ var lstEl = this[this.length-1];
+ this.length = Math.max(this.length-1,0);
+ return lstEl;
+ };
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu.js
new file mode 100644
index 000000000..ce5937c3d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu.js
@@ -0,0 +1,18 @@
+/*----------------------------------------------------|
+ | dTree 2.05 | www.destroydrop.com/javascript/tree/ |
+ |---------------------------------------------------|
+ | Copyright (c) 2002-2003 Geir Landro |
+ | |
+ | This script can be used freely as long as all |
+ | copyright messages are intact. |
+ | |
+ | Updated: 17.04.2003 |
+ |---------------------------------------------------|
+ | Modified for Dokuwiki by |
+ | Samuele Tognini <samuele@netsons.org> |
+ | under GPL 2 license |
+ | (http://www.gnu.org/licenses/gpl.html) |
+ | Updated: 29.08.2009 |
+ |---------------------------------------------------|
+ | indexmenu | wiki.splitbrain.org/plugin:indexmenu |
+ |--------------------------------------------------*/ function Node(g,f,e,d,c,b,a){this.dokuid=g;this.id=f;this.pid=e;this.name=d;this.hns=c;this.isdir=b;this.ajax=a;this._io=0;this._is=false;this._ls=false;this._hc=a;this._ai=0;this._p=false;this._lv=0;this._ok=false;this._cp=false;}function dTree(d,c){var b=indexmenu_findExt(c);this.config={urlbase:DOKU_BASE+"doku.php?id=",plugbase:DOKU_MEDIA+"lib/plugins/indexmenu",useCookies:true,scroll:true,toc:true,maxjs:1,jsajax:"",sepchar:":",theme:c};var a=this.config.plugbase+"/images/"+c+"/";this.icon={root:a+"base."+b,folder:a+"folder."+b,folderH:a+"folderh."+b,folderOpen:a+"folderopen."+b,folderHOpen:a+"folderhopen."+b,node:a+"page."+b,empty:a+"empty."+b,line:a+"line."+b,join:a+"join."+b,joinBottom:a+"joinbottom."+b,plus:a+"plus."+b,plusBottom:a+"plusbottom."+b,minus:a+"minus."+b,minusBottom:a+"minusbottom."+b,nlPlus:a+"nolines_plus."+b,nlMinus:a+"nolines_minus."+b};this.obj=d;this.aNodes=[];this.aIndent=[];this.root=new Node(false,-1);this.selectedNode=null;this.selectedFound=false;this.completed=false;this.scrllTmr=0;this.pageid=window.indexmenu_ID||"";this.fajax=false;}dTree.prototype.add=(function(g,f,e,d,c,b,a){this.aNodes[this.aNodes.length]=new Node(g,f,e,d,c,b,a);});dTree.prototype.openAll=(function(){if(!this.getCookie("co"+this.obj)){this.oAll(true);}});dTree.prototype.toString=(function(){var str="";if(this.config.scroll){str+="<div id=\"cdtree_"+this.obj+"\" class=\"dtree\" style=\"position:relative;overflow:hidden;width:100%;\">";}str+="<div id=\"dtree_"+this.obj+"\" class=\"dtree "+this.config.theme+"\" style=\"overflow:";if(this.config.scroll){str+="visible;position:relative;width:100%\"";}else{str+="hidden;\"";}str+=">";if(DOKUid("dtree_"+this.obj)){str+="<div class=\"error\">Indexmenu id conflict</div>";}if(this.config.toc){str+="<div id=\"t"+this.obj+"\" class=\"indexmenu_tocbullet "+this.config.theme+"\" style=\"display:none;\" title=\"Table of contents\"></div>";str+="<div id=\"toc_"+this.obj+"\" style=\"display:none;\"></div>";}if(this.config.useCookies){this.selectedNode=this.getSelected();}str+=this.addNode(this.root)+"</div>";if(this.config.scroll){str+="<div id=\"z"+this.obj+"\" class=\"indexmenu_rarrow\"></div>";str+="<div id=\"left_"+this.obj+"\" class=\"indexmenu_larrow\" style=\"display:none;\" title=\"Click to scroll back\" onmousedown=\"javascript:"+this.obj+".scroll('r',1);\" onmouseup=\"javascript:"+this.obj+".stopscroll();\"></div>";str+="</div>";}this.completed=true;this.divdisplay("nojs_",0);return str;});dTree.prototype.addNode=(function(pNode){var str="",cn,n=pNode._ai,l=pNode._lv+1;for(n;n<this.aNodes.length;n++){if(this.aNodes[n].pid==pNode.id){cn=this.aNodes[n];cn._p=pNode;cn._ai=n;cn._lv=l;this.setCS(cn);if(cn._hc&&!cn._io&&this.config.useCookies){cn._io=this.isOpen(cn.id);}if(this.pageid==(!cn.hns&&cn.dokuid||cn.hns)){cn._cp=true;}else{if(cn.id==this.selectedNode&&!this.selectedFound){cn._is=true;this.selectedNode=n;this.selectedFound=true;}}if(!cn._hc&&cn.isdir&&!cn.ajax&&!cn.hns){if(cn._ls){str+=this.noderr(cn,n);}}else{str+=this.node(cn,n);}if(cn._ls){break;}}}return str;});dTree.prototype.noderr=(function(node,nodeId){var str="<div class=\"dTreeNode\">"+this.indent(node,nodeId);str+="<div class=\"emptynode\" title=\"Empty\"></div></div>";return str;});dTree.prototype.node=(function(node,nodeId){var h=1,jsfnc,str;jsfnc="onmouseover=\""+this.obj+".show_feat('"+nodeId+"');\" onmousedown=\"return indexmenu_checkcontextm('"+nodeId+"',"+this.obj+",event);\" oncontextmenu=\"return indexmenu_stopevt(event)\"";if(node._lv>this.config.maxjs){h=0;}else{node._ok=true;}str="<div class=\"dTreeNode\">"+this.indent(node,nodeId);node.icon=(this.root.id==node.pid)?this.icon.root:((node.hns)?this.icon.folderH:((node._hc)?this.icon.folder:this.icon.node));node.iconOpen=(node._hc)?((node.hns)?this.icon.folderHOpen:this.icon.folderOpen):this.icon.node;if(this.root.id==node.pid){node.icon=this.icon.root;node.iconOpen=this.icon.root;}str+="<img id=\"i"+this.obj+nodeId+"\" src=\""+((node._io)?node.iconOpen:node.icon)+"\" alt=\"\" />";if(!node._hc||node.hns){str+="<a id=\"s"+this.obj+nodeId+"\" class=\""+((node._cp)?"navSel":((node._is)?"nodeSel":(node._hc)?"nodeFdUrl":"nodeUrl"));str+="\" href=\""+this.config.urlbase;(node.hns)?str+=node.hns:str+=node.dokuid;str+="\" title=\""+node.name+"\""+jsfnc;str+=" onclick=\"javascript: "+this.obj+".s("+nodeId+");\"";str+=">"+node.name+"</a>";}else{if(node.pid!=this.root.id){str+="<a id=\"s"+this.obj+nodeId+"\" href=\"javascript: "+this.obj+".o("+nodeId+"); \" class=\"node\""+jsfnc+">"+node.name+"</a>";}else{str+=node.name;}}str+="</div>";if(node._hc){str+="<div id=\"d"+this.obj+nodeId+"\" class=\"clip\" style=\"display:"+((this.root.id==node.pid||node._io)?"block":"none")+";\">";if(h){str+=this.addNode(node);}str+="</div>";}this.aIndent.pop();return str;});dTree.prototype.indent=(function(node,nodeId){var n,str="";if(this.root.id!=node.pid){for(n=0;n<this.aIndent.length;n++){str+="<img src=\""+((this.aIndent[n]==1)?this.icon.line:this.icon.empty)+"\" alt=\"\" />";}if(node._ls){this.aIndent.push(0);}else{this.aIndent.push(1);}if(node._hc){str+="<a href=\"javascript: "+this.obj+".o("+nodeId+");\"><img id=\"j"+this.obj+nodeId+"\" src=\"";str+=((node._io)?((node._ls)?this.icon.minusBottom:this.icon.minus):((node._ls)?this.icon.plusBottom:this.icon.plus));str+="\" alt=\"\" /></a>";}else{str+="<img src=\""+((node._ls)?this.icon.joinBottom:this.icon.join)+"\" alt=\"\" />";}}return str;});dTree.prototype.setCS=(function(node){var lastId,n;for(n=0;n<this.aNodes.length;n++){if(this.aNodes[n].pid==node.id){node._hc=true;}if(this.aNodes[n].pid==node.pid){lastId=this.aNodes[n].id;}}if(lastId==node.id){node._ls=true;}});dTree.prototype.getSelected=(function(){var sn=this.getCookie("cs"+this.obj);return(sn)?sn:null;});dTree.prototype.s=(function(id){var eOld,eNew,cn=this.aNodes[id];if(this.selectedNode!=id){eNew=DOKUid("s"+this.obj+id);if(!eNew){return;}if(this.selectedNode||this.selectedNode===0){eOld=DOKUid("s"+this.obj+this.selectedNode);eOld.className="node";}eNew.className="nodeSel";this.selectedNode=id;if(this.config.useCookies){this.setCookie("cs"+this.obj,cn.id);}}});dTree.prototype.o=(function(id){var cn=this.aNodes[id];this.nodeStatus(!cn._io,id,cn._ls);cn._io=!cn._io;if(this.config.useCookies){this.updateCookie();}this.divdisplay("z",0);this.resizescroll("block");});dTree.prototype.oAll=(function(status){for(var n=0;n<this.aNodes.length;n++){if(this.aNodes[n]._hc&&this.aNodes[n].pid!=this.root.id){this.nodeStatus(status,n,this.aNodes[n]._ls);this.aNodes[n]._io=status;}}if(this.config.useCookies){this.updateCookie();}});dTree.prototype.openTo=(function(nId,bSelect,bFirst){var n,cn;if(!bFirst){for(n=0;n<this.aNodes.length;n++){if(this.aNodes[n].id==nId){nId=n;break;}}}this.fill(this.aNodes[nId].pid);cn=this.aNodes[nId];if(cn.pid==this.root.id||!cn._p){return;}cn._io=1;if(this.completed&&cn._hc){this.nodeStatus(true,cn._ai,cn._ls);}if(cn._is){(this.completed)?this.s(cn._ai):this._sn=cn._ai;}this.openTo(cn._p._ai,false,true);});dTree.prototype.getOpenTo=(function(nodes){if(nodes===""){this.openAll();}else{if(!this.config.useCookies||!this.getCookie("co"+this.obj)){for(var n=0;n<nodes.length;n++){this.openTo(nodes[n],false,true);}}}});dTree.prototype.nodeStatus=(function(status,id,bottom){if(status&&!this.fill(id)){return;}var eJoin,eIcon;eJoin=DOKUid("j"+this.obj+id);eIcon=DOKUid("i"+this.obj+id);eIcon.src=(status)?this.aNodes[id].iconOpen:this.aNodes[id].icon;eJoin.src=((status)?((bottom)?this.icon.minusBottom:this.icon.minus):((bottom)?this.icon.plusBottom:this.icon.plus));DOKUid("d"+this.obj+id).style.display=(status)?"block":"none";});dTree.prototype.clearCookie=(function(){var now,yday;now=new Date();yday=new Date(now.getTime()-86400000);this.setCookie("co"+this.obj,"cookieValue",yday);this.setCookie("cs"+this.obj,"cookieValue",yday);});dTree.prototype.setCookie=(function(cookieName,cookieValue,expires,path,domain,secure){document.cookie=escape(cookieName)+"="+escape(cookieValue)+(expires?"; expires="+expires.toGMTString():"")+";path=/"+(domain?"; domain="+domain:"")+(secure?"; secure":"");});dTree.prototype.getCookie=(function(cookieName){var cookieValue="",pN,posValue,endPos;pN=document.cookie.indexOf(escape(cookieName)+"=");if(pN!=-1){posValue=pN+(escape(cookieName)+"=").length;endPos=document.cookie.indexOf(";",posValue);if(endPos!=-1){cookieValue=unescape(document.cookie.substring(posValue,endPos));}else{cookieValue=unescape(document.cookie.substring(posValue));}}return(cookieValue);});dTree.prototype.updateCookie=(function(){var str="",n;for(n=0;n<this.aNodes.length;n++){if(this.aNodes[n]._io&&this.aNodes[n].pid!=this.root.id){if(str){str+=".";}str+=this.aNodes[n].id;}}this.setCookie("co"+this.obj,str);});dTree.prototype.isOpen=(function(id){var n,aOpen=this.getCookie("co"+this.obj).split(".");for(n=0;n<aOpen.length;n++){if(aOpen[n]==id){return true;}}return false;});dTree.prototype.openCurNS=(function(max){var r,cn,match,t,i,n,cnsa,cna,cns=this.pageid;r=new RegExp("\\b"+this.config.sepchar+"\\b","g");match=cns.match(r)||-1;if(max>0&&match.length>=max){t=cns.split(this.config.sepchar);n=(this.aNodes[0].dokuid=="")?0:this.aNodes[0].dokuid.split(this.config.sepchar).length;t.splice(max+n,t.length);cnsa=t.join(this.config.sepchar);}for(i=0;i<this.aNodes.length;i++){cn=this.aNodes[i];if(cns==cn.dokuid||cns==cn.hns){this.openTo(cn.id,false,true);this.fajax=false;if(cn.pid>=0){addInitEvent(this.scroll("l",4,cn.pid,1));}break;}if(cnsa==cn.dokuid||cnsa==cn.hns){cna=cn;this.fajax=true;}}if(cna){this.openTo(cna.id,false,true);}});dTree.prototype.fill=(function(id){if(id==-1||this.aNodes[id]._ok){return true;}var n=id,eLoad,node,a,rd,ln,eDiv;if(this.aNodes[n].ajax){eLoad=DOKUid("l"+this.obj);node=DOKUid("s"+this.obj+n);if(!eLoad){eLoad=indexmenu_createPicker("l"+this.obj);}eLoad.innerHTML="Loading ...";DOKUid("s"+this.obj+n).parentNode.appendChild(eLoad);eLoad.style.width="auto";eLoad.style.display="inline";this.getAjax(n);return true;}rd=[];while(!this.aNodes[n]._ok){rd[rd.length]=n;n=this.aNodes[n].pid;}for(ln=rd.length-1;ln>=0;ln--){id=rd[ln];a=this.aNodes[id];eDiv=DOKUid("d"+this.obj+id);if(!eDiv){return false;}this.aIndent=[];n=a;while(n.pid>=0){if(n._ls){this.aIndent.unshift(0);}else{this.aIndent.unshift(1);}n=n._p;}eDiv.innerHTML=this.addNode(a);a._ok=true;}return true;});dTree.prototype.openCookies=(function(){var n,cn,aOpen=this.getCookie("co"+this.obj).split(".");for(n=0;n<aOpen.length;n++){if(aOpen[n]===""){break;}cn=this.aNodes[aOpen[n]];if(!cn._ok){this.nodeStatus(true,aOpen[n],cn._ls);cn._io=1;}}});dTree.prototype.scroll=(function(where,s,n,i){if(!this.config.scroll){return false;}var w,dtree,dtreel,nodeId;dtree=DOKUid("dtree_"+this.obj);dtreel=parseInt(dtree.offsetLeft,0);if(where=="r"){DOKUid("left_"+this.obj).style.border="thin inset";this.scrollRight(dtreel,s);}else{nodeId=DOKUid("s"+this.obj+n);w=parseInt(dtree.parentNode.offsetWidth-nodeId.offsetWidth-nodeId.offsetLeft,0);if(this.config.toc){w=w-11;}if(dtreel<=w){return;}this.resizescroll("none");this.stopscroll();this.scrollLeft(dtreel,s,w-3,i);}});dTree.prototype.scrollLeft=(function(lft,s,w,i){if(lft<w-i-10){this.divdisplay("z",0);this.scrllTmr=0;return;}var self=this;DOKUid("dtree_"+self.obj).style.left=lft+"px";this.scrllTmr=setTimeout((function(){self.scrollLeft(lft-s,s+i,w,i);}),20);});dTree.prototype.scrollRight=(function(lft,s){if(lft>=s){this.divdisplay("left_",0);this.stopscroll();return;}var self=this;DOKUid("dtree_"+self.obj).style.left=lft+"px";if(lft>-15){s=1;}this.scrllTmr=setTimeout((function(){self.scrollRight(lft+s,s+1);}),20);});dTree.prototype.stopscroll=(function(){DOKUid("left_"+this.obj).style.border="none";clearTimeout(this.scrllTmr);this.scrllTmr=0;});dTree.prototype.show_feat=(function(n){var w,div,id,dtree,dtreel,self,node=DOKUid("s"+this.obj+n);self=this;if(this.config.toc&&node.className!="node"){div=DOKUid("t"+this.obj);id=(this.aNodes[n].hns)?this.aNodes[n].hns:this.aNodes[n].dokuid;div.onmousedown=(function(){indexmenu_createTocMenu("req=toc&id="+decodeURIComponent(id),"picker_"+self.obj,"t"+self.obj);});node.parentNode.appendChild(div);if(div.style.display=="none"){div.style.display="inline";}}if(this.config.scroll){div=DOKUid("z"+this.obj);div.onmouseover=(function(){div.style.border="none";self.scroll("l",1,n,0);});div.onmousedown=(function(){div.style.border="thin inset";self.scroll("l",4,n,1);});div.onmouseout=(function(){div.style.border="none";self.stopscroll();});div.onmouseup=div.onmouseover;dtree=DOKUid("dtree_"+this.obj);dtreel=parseInt(dtree.offsetLeft,0);w=parseInt(dtree.parentNode.offsetWidth-node.offsetWidth-node.offsetLeft+1,0);if(dtreel>w){div.style.display="none";div.style.top=node.offsetTop+"px";div.style.left=parseInt(node.offsetLeft+node.offsetWidth+w-12,0)+"px";div.style.display="block";}}});dTree.prototype.resizescroll=(function(status){var dtree,w,h,left=DOKUid("left_"+this.obj);if(!left){return;}if(left.style.display==status){dtree=DOKUid("dtree_"+this.obj);w=parseInt(dtree.offsetHeight/3,0);h=parseInt(w/50,0)*50;if(h<50){h=50;}left.style.height=h+"px";left.style.top=w+"px";if(status=="none"){left.style.display="block";}}});dTree.prototype.getAjax=(function(n){var node,req,curns,selft=this;node=selft.aNodes[n];var Ajax=new sack(DOKU_BASE+"lib/plugins/indexmenu/ajax.php");req="req=index&idx="+node.dokuid+decodeURIComponent(this.config.jsajax);curns=this.pageid.substring(0,this.pageid.lastIndexOf(this.config.sepchar));Ajax.encodeURIString=false;Ajax.onCompletion=(function(){var i,ajxnodes,ajxnode,plus;plus=selft.aNodes.length-1;eval(this.response);if(!isArray(ajxnodes)||ajxnodes.length<1){ajxnodes=[["",1,0,"",0,1,0]];}node.ajax=false;for(i=0;i<ajxnodes.length;i++){ajxnode=ajxnodes[i];ajxnode[2]=(ajxnode[2]==0)?node.id:ajxnode[2]+plus;ajxnode[1]+=plus;selft.add(ajxnode[0],ajxnode[1],ajxnode[2],ajxnode[3],ajxnode[4],ajxnode[5],ajxnode[6]);}if(selft.fajax){selft.fajax=false;selft.openCurNS(0);}else{selft.openTo(node.id,false,true);}DOKUid("l"+selft.obj).style.display="none";});if(this.fajax){req+="&nss="+curns+"&max=1";}Ajax.encodeURIString=false;Ajax.runAJAX(encodeURI(req));});dTree.prototype.loadCss=(function(){var oLink=document.createElement("link");oLink.href=this.config.plugbase+"/images/"+this.config.theme+"/style.css";oLink.rel="stylesheet";oLink.type="text/css";document.getElementsByTagName("head")[0].appendChild(oLink);});dTree.prototype.contextmenu=(function(n,e){var li,id,html,type,node,self,cmenu,cdtree,rmenu,X=0,Y=0,i;cdtree=DOKUid("cdtree_"+this.obj);rmenu=DOKUid("r"+this.obj);if(!rmenu){return true;}indexmenu_mouseposition(rmenu,e);cmenu=window.indexmenu_contextmenu[0];node=this.aNodes[n];self=this;rmenu.innerHTML="<div class=\"indexmenu_rmenuhead\" title=\""+node.name+"\">"+node.name+"</div>";for(i=0;i<cmenu.length;i++,i++,i++,i++){if(((!node._hc||node.hns)&&!cmenu[i+2])||(node._hc&&!node.hns&&!cmenu[i+3])){continue;}html=cmenu[i];if(cmenu[i+1]){type="li";id=(node.hns)?node.hns:node.dokuid;html="<a title=\""+cmenu[i]+"\" href=\""+eval(cmenu[i+1])+"\">"+html+"</a>";}else{type="span";rmenu.appendChild(document.createElement("ul"));}li=document.createElement(type);li.innerHTML=html;rmenu.lastChild.appendChild(li);}rmenu.style.display="inline";return false;});dTree.prototype.divdisplay=(function(obj,v){var o=DOKUid(obj+this.obj);if(!o){return false;}(v)?o.style.display="inline":o.style.display="none";});dTree.prototype.init=(function(s,c,n,nav,max){if(s){this.loadCss();}if(!c){this.openCookies();}if(n){this.getOpenTo(n.split(" "));}if(nav){this.openCurNS(max);}if(window.indexmenu_contextmenu){var self=this;indexmenu_createPicker("r"+this.obj,"indexmenu_rmenu "+this.config.theme);DOKUid("r"+this.obj).oncontextmenu=indexmenu_stopevt;addEvent(document,"click",(function(){self.divdisplay("r",0);}));}});if(!Array.prototype.push){Array.prototype.push=(function array_push(){for(var i=0;i<arguments.length;i++){this[this.length]=arguments[i];}return this.length;});}if(!Array.prototype.pop){Array.prototype.pop=(function array_pop(){var lstEl=this[this.length-1];this.length=Math.max(this.length-1,0);return lstEl;});}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/admmenu.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/admmenu.js
new file mode 100644
index 000000000..2ea6e32f2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/admmenu.js
@@ -0,0 +1,71 @@
+/* Right Context Menu configuration for admin users:
+ Menu is built from four array items: title, link, show if page or headpage, show if namespace.
+ Link is not created if it's 0, otherwise it's evaluated.
+ Second array is displayed only in edit mode.
+
+ Some usefull variables:
+ node.hns = headpage id;
+ node.isdir = node is namespace;
+ node.dokuid = the DW id (namespace parent in case of headpage);
+ id = the DW id of the selected node (headpage id in case of headpage);
+ this.config.urlbase = Url Base;
+ this.config.sepchar = Url separator;
+*/
+
+var indexmenu_contextmenu=new Array(
+ //Standard right menu
+ new Array(
+ '<b><em>Page action:</em></b>',0,1,0,
+ '<b><em>Namespace action:</em></b>',0,0,1,
+ 'New page here','"javascript: indexmenu_reqpage(\'"+this.config.urlbase+"\',\'"+this.config.sepchar+"\',\'"+node.dokuid+"\');"',1,1,
+ 'Headpage here','"javascript: indexmenu_reqpage(\'"+this.config.urlbase+"\',\'"+this.config.sepchar+"\',\'"+node.dokuid+"\',\'"+node.name+"\');"',0,1,
+ 'Edit','indexmenu_getid(this.config.urlbase,id)+"do=edit"',1,0,
+ 'Search','"javascript: indexmenu_srchpage(\'"+this.config.urlbase+"\',\'"+this.config.sepchar+"\',\'"+node.isdir+"\',\'"+node.dokuid+"\');"',1,1,
+ 'Toc preview','"javascript: indexmenu_createTocMenu(\'req=toc&id="+id+"\',\'picker_"+this.obj+"\',\'s"+this.obj+node.id+"\');"',1,0,
+ 'Revisions','indexmenu_getid(this.config.urlbase,id)+"do=revisions"',1,0,
+ 'Purge cache','indexmenu_getid(this.config.urlbase,id)+"purge=true"',1,0,
+ 'Acls','indexmenu_getid(this.config.urlbase,id)+"do=admin&dokupage=acl"',1,1
+ ),
+
+ //Right menu in edit mode.
+ new Array(
+ '<b><em>Edit action:</em></b>',0,1,0,
+ 'Insert as DWlink','"javascript: indexmenu_insertTags(\'"+id+"\',\'"+this.config.sepchar+"\');"+this.obj+".divdisplay(\'r\',0);"',1,0
+ )
+ );
+
+/*Custom User Functions
+Insert your custom functions here.
+*/
+function indexmenu_reqpage(b,s,id,n) {
+ var r,u=b;
+ if (n) {
+ r = id + s + n;
+ } else {
+ r = prompt("Insert the pagename to create","");
+ if (!r) {return;}
+ r = id + s + r;
+ }
+ if (r) window.location.href = indexmenu_getid(u,r);
+}
+
+function indexmenu_srchpage(u,s,isdir,nid) {
+ var r = prompt("Insert keyword(s) to search for within this namespace","");
+ if (r)
+ {
+ var fnid = nid;
+ if (isdir == "0") {
+ fnid = fnid.substring(0,nid.lastIndexOf(s));
+ }
+ var b=u,re = new RegExp(s, 'g');
+ fnid = fnid.replace(re, ":");
+ b += (u.indexOf("?id=") < 0) ? '?id=': '';
+ window.location.href = indexmenu_getid(b,r+" @"+fnid)+"do=search";
+ }
+}
+
+function indexmenu_getid(u,id) {
+ var url=(u||'')+encodeURI(id||'');
+ url += (u.indexOf("?") < 0) ? '?': '&';
+ return url;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/menu.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/menu.js
new file mode 100644
index 000000000..d92956141
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/menu.js
@@ -0,0 +1,56 @@
+/* Right Context Menu configuration for anonymous users:
+ Menu is built from four array items: title, link, show if page or headpage, show if namespace.
+ Link is not created if it's 0, otherwise it's evaluated.
+ Second array is displayed only in edit mode.
+
+ Some usefull variables:
+ node.hns = headpage id;
+ node.isdir = node is namespace;
+ node.dokuid = the DW id (namespace parent in case of headpage);
+ id = the DW id of the selected node (headpage id in case of headpage);
+ this.config.urlbase = Url Base;
+ this.config.sepchar = Url separator;
+*/
+
+var indexmenu_contextmenu=new Array(
+ //Standard right menu
+ new Array(
+ '<b><em>Page action:</em></b>',0,1,0,
+ '<b><em>Namespace action:</em></b>',0,0,1,
+ 'Search','"javascript: indexmenu_srchpage(\'"+this.config.urlbase+"\',\'"+this.config.sepchar+"\',\'"+node.isdir+"\',\'"+node.dokuid+"\');"',1,1,
+ 'Toc preview','"javascript: indexmenu_createTocMenu(\'req=toc&id="+id+"\',\'picker_"+this.obj+"\',\'s"+this.obj+node.id+"\');"',1,0,
+ 'Revisions','indexmenu_getid(this.config.urlbase,id)+"do=revisions"',1,0
+ ),
+
+ //Right menu in edit mode.
+ new Array(
+ '<b><em>Edit action:</em></b>',0,1,0,
+ 'Insert as DWlink','"javascript: indexmenu_insertTags(\'"+id+"\',\'"+this.config.sepchar+"\');"+this.obj+".divdisplay(\'r\',0);"',1,0,
+ 'Edit','indexmenu_getid(this.config.urlbase,id)+"do=edit"',1,0
+ )
+ );
+
+/*Custom User Functions
+Insert your custom functions here.
+*/
+
+function indexmenu_srchpage(u,s,isdir,nid) {
+ var r = prompt("Insert keyword(s) to search for within this namespace","");
+ if (r)
+ {
+ var fnid = nid;
+ if (isdir == "0") {
+ fnid = fnid.substring(0,nid.lastIndexOf(s));
+ }
+ var b=u,re = new RegExp(s, 'g');
+ fnid = fnid.replace(re, ":");
+ b += (u.indexOf("?id=") < 0) ? '?id=': '';
+ window.location.href = indexmenu_getid(b,r+" @"+fnid)+"do=search";
+ }
+}
+
+function indexmenu_getid(u,id) {
+ var url=(u||'')+encodeURI(id||'');
+ url += (u.indexOf("?") < 0) ? '?': '&';
+ return url;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/usrmenu.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/usrmenu.js
new file mode 100644
index 000000000..d58ae3802
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/usrmenu.js
@@ -0,0 +1,69 @@
+/* Right Context Menu configuration for authenticated users:
+ Menu is built from four array items: title, link, show if page or headpage, show if namespace.
+ Link is not created if it's 0, otherwise it's evaluated.
+ Second array is displayed only in edit mode.
+
+ Some usefull variables:
+ node.hns = headpage id;
+ node.isdir = node is namespace;
+ node.dokuid = the DW id (namespace parent in case of headpage);
+ id = the DW id of the selected node (headpage id in case of headpage);
+ this.config.urlbase = Url Base;
+ this.config.sepchar = Url separator;
+*/
+
+var indexmenu_contextmenu=new Array(
+ //Standard right menu
+ new Array(
+ '<b><em>Page action:</em></b>',0,1,0,
+ '<b><em>Namespace action:</em></b>',0,0,1,
+ 'New page here','"javascript: indexmenu_reqpage(\'"+this.config.urlbase+"\',\'"+this.config.sepchar+"\',\'"+node.dokuid+"\');"',1,1,
+ 'Headpage here','"javascript: indexmenu_reqpage(\'"+this.config.urlbase+"\',\'"+this.config.sepchar+"\',\'"+node.dokuid+"\',\'"+node.name+"\');"',0,1,
+ 'Edit','indexmenu_getid(this.config.urlbase,id)+"do=edit"',1,0,
+ 'Search','"javascript: indexmenu_srchpage(\'"+this.config.urlbase+"\',\'"+this.config.sepchar+"\',\'"+node.isdir+"\',\'"+node.dokuid+"\');"',1,1,
+ 'Toc preview','"javascript: indexmenu_createTocMenu(\'req=toc&id="+id+"\',\'picker_"+this.obj+"\',\'s"+this.obj+node.id+"\');"',1,0,
+ 'Revisions','indexmenu_getid(this.config.urlbase,id)+"do=revisions"',1,0
+ ),
+
+ //Right menu in edit mode.
+ new Array(
+ '<b><em>Edit action:</em></b>',0,1,0,
+ 'Insert as DWlink','"javascript: indexmenu_insertTags(\'"+id+"\',\'"+this.config.sepchar+"\');"+this.obj+".divdisplay(\'r\',0);"',1,0
+ )
+ );
+
+/*Custom User Functions
+Insert your custom functions here.
+*/
+function indexmenu_reqpage(b,s,id,n) {
+ var r,u=b;
+ if (n) {
+ r = id + s + n;
+ } else {
+ r = prompt("Insert the pagename to create","");
+ if (!r) {return;}
+ r = id + s + r;
+ }
+ if (r) window.location.href = indexmenu_getid(u,r);
+}
+
+function indexmenu_srchpage(u,s,isdir,nid) {
+ var r = prompt("Insert keyword(s) to search for within this namespace","");
+ if (r)
+ {
+ var fnid = nid;
+ if (isdir == "0") {
+ fnid = fnid.substring(0,nid.lastIndexOf(s));
+ }
+ var b=u,re = new RegExp(s, 'g');
+ fnid = fnid.replace(re, ":");
+ b += (u.indexOf("?id=") < 0) ? '?id=': '';
+ window.location.href = indexmenu_getid(b,r+" @"+fnid)+"do=search";
+ }
+}
+
+function indexmenu_getid(u,id) {
+ var url=(u||'')+encodeURI(id||'');
+ url += (u.indexOf("?") < 0) ? '?': '&';
+ return url;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/de/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/de/lang.php
new file mode 100644
index 000000000..29d939aa5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/de/lang.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * German language for indexmenu plugin
+ *
+ * @license: GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author: Fabian Pfannes <fpfannes@web.de>
+ */
+$lang['menu'] = 'Indexmenu Werkzeuge';
+$lang['fetch'] = 'Anzeigen';
+$lang['install'] = 'Installieren';
+$lang['delete'] = 'L&ouml;schen';
+$lang['check'] = '&Uuml;berpr&uuml;fen';
+$lang['no_repos'] = 'Keine URL f&uuml;r ein Template Repository vorhanden.';
+$lang['disabled'] = 'Deaktiviert';
+$lang['conn_err'] = 'Verbindung fehlgeschlagen';
+$lang['dir_err'] = 'Fehler bei der Erzeugung eines Verzeichnises. Designvorlage konnte nicht gespeichert werden';
+$lang['down_err'] = 'Fehler beim Herunterladen der Designvorlage';
+$lang['zip_err'] = 'Fehler beim Erstellen oder Entpacken der Zip-Datei';
+$lang['install_ok'] = 'Designvorlage wurde erfolgreich erstellt. Die neue Designvorlage ist in der Werkzeugleiste der Konfigurationsseite oder &uuml;ber die js#theme_name Option verf&uuml;gbar.';
+$lang['install_no'] = 'Verbindungsfehler. Sie k&ouml;nnen aber versuchen die Designvorlage <a href="http://samuele.netsons.org/dokuwiki/lib/plugins/indexmenu/upload/">hier</a> hochzuladen.';
+$lang['delete_ok'] = 'Designvorlage wurde erfolgreich gel&ouml;scht.';
+$lang['delete_no'] = 'Beim L&ouml;schen ist ein Fehler aufgetreten';
+$lang['upload'] = 'Hochladen';
+$lang['checkupdates'] = 'Plugin updaten';
+$lang['noupdates'] = "Indexmenu muss nicht upgedated werden. Sie haben bereits die aktuellste Version:";
+$lang['infos'] = 'Sie k&ouml;nnen eine neue Designvorlage erstellen. Beachten Sie die Anleitung im <a href="http://wiki.splitbrain.org/plugin:indexmenu#theme_tutorial">Designvorlagen Tutorial</a. <br />Wenn Sie den "Hochladen" Button unter der Desingvorlage dr&uuml;cken k&ouml;nnen Sie viele Leute gl&uuml;cklich machen :-) dadurch, dass Sie sie im &ouml;ffentliche Indexmenu Repository bereitstellen.';
+$lang['showsort']="Indexmenu Sortierungsnummer: ";
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/en/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/en/lang.php
new file mode 100644
index 000000000..e298caa44
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/en/lang.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * English language for indexmenu plugin
+ *
+ * @license: GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author: Samuele Tognini <samuele@netsons.org>
+ */
+$lang['menu'] = 'Indexmenu Utilities';
+$lang['fetch'] = 'Show';
+$lang['install'] = 'Install';
+$lang['delete'] = 'Delete';
+$lang['check'] = 'Check';
+$lang['no_repos'] = 'No theme repository url configured.';
+$lang['disabled'] = 'Disabled';
+$lang['conn_err'] = 'Connection error';
+$lang['dir_err'] = 'Unable to create temporary folder to receive theme';
+$lang['down_err'] = 'Unable to receive theme';
+$lang['zip_err'] = 'Zip creation or extraction error';
+$lang['install_ok'] = 'theme installed successfully. The new theme is avaiable in the toolbar of the edit page or with the js#theme_name option.';
+$lang['install_no'] = 'Connection error. However you can try to upload manually your theme from <a href="http://samuele.netsons.org/dokuwiki/lib/plugins/indexmenu/upload/">here</a>.';
+$lang['delete_ok'] = 'Theme is successfully deleted.';
+$lang['delete_no'] = 'An error occurred during theme deleting';
+$lang['upload'] = 'Share';
+$lang['checkupdates'] = 'Plugin updates';
+$lang['noupdates'] = "Indexmenu does not need to be update. You have already the last release:";
+$lang['infos'] = 'You can create your theme following the instructions at the <a href="http://wiki.splitbrain.org/plugin:indexmenu#theme_tutorial">Theme Tutorial</a> page. <br />Then you could make more people happy :-) sending it to the public indexmenu repository, with the "share" button under that theme.';
+$lang['showsort']="Indexmenu sort number: ";
+$lang['donation_text'] = 'The indexmenu plugin is not sponsored by anyone but i develop and support it for free during my spare time. If you gain something thanks to it or you want to support its development, you can consider to make a donation.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/es/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/es/lang.php
new file mode 100644
index 000000000..114237f32
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/es/lang.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * spanish language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Digna González Otero <digna.gonzalezotero [at] gmail [dot] com>
+ */
+
+$lang['menu'] = 'Utilidades de Indexmenu';
+$lang['fetch'] = 'Mostrar';
+$lang['install'] = 'Instalar';
+$lang['delete'] = 'Eliminar';
+$lang['check'] = 'Seleccionar';
+$lang['no_repos'] = 'Url de repositorio de temas no configurado.';
+$lang['disabled'] = 'Desactivado';
+$lang['conn_err'] = 'Error de conexión';
+$lang['dir_err'] = 'Imposible crear directorio temporar para almacenar el tema';
+$lang['down_err'] = 'Imposible recibir el tema';
+$lang['zip_err'] = 'Error de creación o extracción de Zip';
+$lang['install_ok'] = 'Tema instalado satisfactoriamente. El nuevo tema está disponible en la barra de herramientas de la página a editar o con el comando js#nombre_del_tema opción.';
+$lang['install_no'] = 'Error de conexión. Puedes intentar subir tu tema manualmente desde <a href="http://samuele.netsons.org/dokuwiki/lib/plugins/indexmenu/upload/">here</a>.';
+$lang['delete_ok'] = 'Tema eliminado correctamente.';
+$lang['delete_no'] = 'Ocurrió un error durante la eliminación del tema';
+$lang['upload'] = 'Compartir';
+$lang['checkupdates'] = 'Actualizaciones de plugin';
+$lang['noupdates'] = "No es necesario actualizar Indexmenu. Ya tienes la última versión:";
+$lang['infos'] = 'Puedes crear tu tema siguiendo las instrucciones de la página <a href="http://wiki.splitbrain.org/plugin:indexmenu#theme_tutorial">Theme Tutorial</a>. <br />Después puedes hacer feliz a más gente:-) enviándolo al repositorio público de indexmenu, con el botón de "compartir" bajo ese tema.';
+$lang['showsort']="Número de posición de Indexmenu: ";
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/it/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/it/lang.php
new file mode 100644
index 000000000..4f6bbcd54
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/it/lang.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * Italian language for indexmenu plugin
+ *
+ * @license: GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author: Samuele Tognini <samuele@netsons.org>
+ */
+$lang['menu'] = "Utility di Indexmenu";
+$lang['fetch'] = 'Mostra';
+$lang['install'] = 'Installa';
+$lang['delete'] = 'Elimina';
+$lang['check'] = 'Controlla';
+$lang['no_repos'] = 'Non &egrave stato configurato nessun indirizzo web per il repository dei temi.';
+$lang['disabled'] = 'Disabilitato';
+$lang['conn_err'] = 'Errore di connessione';
+$lang['local_themes'] = 'Temi installati';
+$lang['dir_err'] = 'Impossibile creare la directory temporanea per scaricare il tema';
+$lang['down_err'] = 'Impossibile scaricare il tema';
+$lang['zip_err'] = 'Errore durante la creazione o scompattazione dell\' archivio';
+$lang['install_ok'] = "tema installato correttamente. Il nuovo tema &egrave accessibile dalla toolbar degli strumenti quando crei una pagina oppure tramite l' opzione js#nome_tema di indexmenu.";
+$lang['install_no'] = 'Errore durante l\' upload. Puoi comunque provare ad inviarmi manualmente il tema da <a href="http://samuele.netsons.org/dokuwiki/lib/plugins/indexmenu/upload/">qui</a>.';
+$lang['delete_ok'] = 'Rimozione del tema avvenuta con successo';
+$lang['delete_no'] = "Errore durante la rimozione del tema";
+$lang['upload'] = 'Condividi';
+$lang['checkupdates'] = 'Aggiornamenti plugin';
+$lang['noupdates'] = "Indexmenu non ha bisogno di essere aggiornato. Hai gi&agrave l'ultima release:";
+$lang['infos'] = 'Puoi creare il tuo tema seguendo le istruzioni nella pagina del <a href="http://wiki.splitbrain.org/plugin:indexmenu#theme_tutorial">Tutorial dei temi</a>.<br /> Poi potreste rendere felice pi&ugrave gente :-) inviandolo nel repository pubblico di indexemnu tramite il pulsante "condividi" sotto il tema della lista.';
+$lang['showsort']="Ordinamento in indexmenu: ";
+$lang['donation_text'] = 'Il plugin indexmenu non &egrave sponsorizzato da nessuno, ma lo sviluppo e supporto gratuitamente nel mio tempo libero. Se guadagni qualcosa grazie a questo plugin o vuoi supportarne lo sviluppo, puoi farlo con una donazione.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex-full.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex-full.js
new file mode 100644
index 000000000..34c8266cc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex-full.js
@@ -0,0 +1,101 @@
+/**
+ * Javascript for index view
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+indexmenu_nojs = {
+ /**
+ * Delay in ms before showing the throbber.
+ * Used to skip the throbber for fast AJAX calls.
+ */
+ throbber_delay: 500,
+
+ /**
+ * Attach event handlers to all "folders" below the given element
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ treeattach: function(iobj){
+ var obj=DOKUid('nojs_'+iobj[0]);
+ if (!obj) return;
+
+ var items = getElementsByClass('indexmenu_idx',obj,'a');
+ for(var i=0; i<items.length; i++){
+ var elem = items[i];
+
+ // attach action to make the link clickable by AJAX
+ addEvent(elem,'click',function(e){ return indexmenu_nojs.toggle(e,this,iobj[1]); });
+ }
+ },
+
+ /**
+ * Open or close a subtree using AJAX
+ * The contents of subtrees are "cached" untill the page is reloaded.
+ * A "loading" indicator is shown only when the AJAX call is slow.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ * Modified by Samuele Tognini <samuele@netsons.org> for the indexmenu plugin
+ */
+ toggle: function(e,clicky,jsajax){
+ var listitem = clicky.parentNode.parentNode;
+
+ // if already open, close by removing the sublist
+ var sublists = listitem.getElementsByTagName('ul');
+ if(sublists.length && listitem.className=='open'){
+ sublists[0].style.display='none';
+ listitem.className='closed';
+ e.preventDefault();
+ return false;
+ }
+
+ // just show if already loaded
+ if(sublists.length && listitem.className=='closed'){
+ sublists[0].style.display='';
+ listitem.className='open';
+ e.preventDefault();
+ return false;
+ }
+
+ // prepare an AJAX call to fetch the subtree
+ var ajax = new sack(DOKU_BASE+'lib/plugins/indexmenu/ajax.php');
+ ajax.AjaxFailedAlert = '';
+ ajax.encodeURIString = false;
+ if(ajax.failed) return true;
+
+ //prepare the new ul
+ var ul = document.createElement('ul');
+ ul.className = 'idx';
+ timeout = window.setTimeout(function(){
+ // show the throbber as needed
+ ul.innerHTML = '<li><img src="'+DOKU_BASE+'lib/images/throbber.gif" alt="loading..." title="loading..." /></li>';
+ listitem.appendChild(ul);
+ listitem.className='open';
+ }, this.throbber_delay);
+ ajax.elementObj = ul;
+ ajax.afterCompletion = function(){
+ window.clearTimeout(timeout);
+ indexmenu_nojs.treeattach(ul);
+ if (listitem.className!='open') {
+ listitem.appendChild(ul);
+ listitem.className='open';
+ }
+ };
+ ajax.runAJAX(encodeURI('req=index&nojs=1&'+clicky.search.substr(1)+'&max=1'+decodeURIComponent(jsajax)));
+ e.preventDefault();
+ return false;
+ },
+
+ /* Find all nojs indexmenu objects */
+ treefind: function () {
+ var aobj=indexmenu_nojsqueue;
+ if (!aobj) return;
+
+ for (var i in aobj) {
+ indexmenu_nojs.treeattach(aobj[i]);
+ }
+ }
+};
+
+indexmenu_nojs.treefind();
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex.js
new file mode 100644
index 000000000..ac437321e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex.js
@@ -0,0 +1 @@
+indexmenu_nojs={throbber_delay:500,treeattach:(function(iobj){var obj=DOKUid("nojs_"+iobj[0]);if(!obj){return;}var items=getElementsByClass("indexmenu_idx",obj,"a");for(var i=0;i<items.length;i++){var elem=items[i];addEvent(elem,"click",(function(e){return indexmenu_nojs.toggle(e,this,iobj[1]);}));}}),toggle:(function(e,clicky,jsajax){var listitem=clicky.parentNode.parentNode;var sublists=listitem.getElementsByTagName("ul");if(sublists.length&&listitem.className=="open"){sublists[0].style.display="none";listitem.className="closed";e.preventDefault();return false;}if(sublists.length&&listitem.className=="closed"){sublists[0].style.display="";listitem.className="open";e.preventDefault();return false;}var ajax=new sack(DOKU_BASE+"lib/plugins/indexmenu/ajax.php");ajax.AjaxFailedAlert="";ajax.encodeURIString=false;if(ajax.failed){return true;}var ul=document.createElement("ul");ul.className="idx";timeout=window.setTimeout((function(){ul.innerHTML="<li><img src=\""+DOKU_BASE+"lib/images/throbber.gif\" alt=\"loading...\" title=\"loading...\" /></li>";listitem.appendChild(ul);listitem.className="open";}),this.throbber_delay);ajax.elementObj=ul;ajax.afterCompletion=(function(){window.clearTimeout(timeout);indexmenu_nojs.treeattach(ul);if(listitem.className!="open"){listitem.appendChild(ul);listitem.className="open";}});ajax.runAJAX(encodeURI("req=index&nojs=1&"+clicky.search.substr(1)+"&max=1"+decodeURIComponent(jsajax)));e.preventDefault();return false;}),treefind:(function(){var aobj=indexmenu_nojsqueue;if(!aobj){return;}for(var i in aobj){indexmenu_nojs.treeattach(aobj[i]);}})};indexmenu_nojs.treefind();
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/script.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/script.js
new file mode 100644
index 000000000..411f0fde5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/script.js
@@ -0,0 +1,152 @@
+/* Queue of loaded script files */
+var indexmenu_jsqueue = [];
+/* Queue of loaded css files */
+var indexmenu_cssqueue = [];
+/* Queue of nojs trees */
+var indexmenu_nojsqueue = [];
+
+function indexmenu_findExt(path){
+ var ext = "gif";
+ var cext = path.lastIndexOf(".");
+ if ( cext > -1){
+ cext++;
+ cext = path.substring(cext, path.length).toLowerCase();
+ if ((cext == "png") || (cext == "jpg")) {ext = cext;}
+ }
+ return ext;
+}
+
+function indexmenu_createTocMenu(get,picker,btn) {
+ var toc_picker = DOKUid(picker);
+ if (!toc_picker) {
+ toc_picker=indexmenu_createPicker(picker);
+ toc_picker.className='dokuwiki indexmenu_toc';
+ toc_picker.innerHTML='<a href="#"><img src="'+DOKU_BASE+'lib/plugins/indexmenu/images/close.gif" class="indexmenu_close" /></a><div />';
+ addEvent(toc_picker.firstChild, 'click',function (event) {event.stopPropagation();return indexmenu_showPicker(picker)});
+ } else {
+ toc_picker.style.display = 'none';
+ }
+ indexmenu_ajaxmenu(get,toc_picker,DOKUid(btn),toc_picker.childNodes[1]);
+}
+
+function indexmenu_ajaxmenu(get,picker,btn,container,oncomplete) {
+ var indx_list;
+ if (container) {
+ indx_list = container;
+ } else {
+ indx_list = picker;
+ }
+ if (!indexmenu_showPicker(picker,btn)) return;
+ // We use SACK to do the AJAX requests
+ var ajax = new sack(DOKU_BASE+'lib/plugins/indexmenu/ajax.php');
+ ajax.encodeURIString=false;
+ ajax.onLoading = function () {
+ indx_list.innerHTML='<div class="tocheader">Loading .....</div>';
+ };
+
+ // define callback
+ ajax.onCompletion = function(){
+ var data = this.response;
+ indx_list.innerHTML="";
+ if (isFunction(oncomplete)) {
+ oncomplete(data,indx_list);
+ } else {
+ indx_list.innerHTML=data;
+ }
+ };
+
+ ajax.runAJAX(encodeURI(get));
+}
+
+function indexmenu_createPicker(id,cl) {
+ var indx_list = document.createElement('div');
+ indx_list.className = cl || 'picker';
+ indx_list.id=id;
+ indx_list.style.position = 'absolute';
+ indx_list.style.display = 'none';
+ var body = document.getElementsByTagName('body')[0];
+ body.appendChild(indx_list);
+ return indx_list;
+}
+
+function indexmenu_showPicker(pickerid,btn){
+ var x = 3, y = 3, picker = DOKUid(pickerid);
+ if(picker.style.display == 'none'){
+ x += findPosX(btn);
+ y += findPosY(btn);
+ if (picker.id != 'picker_plugin_indexmenu') {
+ x += btn.offsetWidth-3;
+ } else {
+ y += btn.offsetHeight;
+ }
+ picker.style.display = 'block';
+ picker.style.left = x+'px';
+ picker.style.top = y+'px';
+ return true;
+ }else{
+ picker.style.display = 'none';
+ return false;
+ }
+}
+
+function indexmenu_loadtoolbar(){
+ var toolbar = DOKUid('tool__bar');
+ if(!toolbar) return;
+ indexmenu_loadJs(DOKU_BASE+'lib/plugins/indexmenu/edit.js');
+}
+
+function indexmenu_loadJs(f){
+ var basef = f.replace(/^.*[\/\\]/g, '');
+ if (indexmenu_notinarray(indexmenu_jsqueue,basef)) {
+ var oLink = document.createElement("script");
+ oLink.src = f;
+ oLink.type = "text/javascript";
+ oLink.charset="utf-8";
+ indexmenu_jsqueue.push(basef);
+ document.getElementsByTagName("head")[0].appendChild(oLink);
+ }
+}
+
+function indexmenu_checkcontextm(n,obj,e){
+ var k=0;
+ e=e||event;
+ if ((e.which == 3 || e.button == 2) || (window.opera && e.which == 1 && e.ctrlKey)) {
+ obj.contextmenu (n,e);
+ indexmenu_stopevt(e);
+ }
+}
+
+function indexmenu_stopevt(e) {
+ if (!window.indexmenu_contextmenu) {
+ return true;
+ }
+ e=e||event;
+ e.preventdefault? e.preventdefault() : e.returnValue = false;
+ return false;
+}
+
+function indexmenu_notinarray(array,val) {
+ for (var i = 0; i < array.length; i++) {
+ if (array[i] == val) {
+ return false;
+ }
+ }
+ return true;
+}
+
+function indexmenu_mouseposition(obj,e) {
+/*http://www.quirksmode.org/js/events_properties.html*/
+ if (!e) e = window.event;
+ if (e.pageX || e.pageY) {
+ X = e.pageX;
+ Y = e.pageY;
+ }
+ else if (e.clientX || e.clientY) {
+ X = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
+ Y = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
+ }
+ obj.style.left=X-5+'px';
+ obj.style.top=Y-5+'px';
+}
+
+addInitEvent(indexmenu_loadtoolbar);
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/style.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/style.css
new file mode 100644
index 000000000..a70cbebfe
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/style.css
@@ -0,0 +1,190 @@
+/*--------------------------------------------------|
+| dTree 2.05 | www.destroydrop.com/javascript/tree/ |
+|---------------------------------------------------|
+| Copyright (c) 2002-2003 Geir Landro |
+|--------------------------------------------------*/
+/*
+ a.nodeFdUrl Namespace with url link (headpage) js
+ a.node Namespace without url link js
+ a.nodeUrl Page js
+ a.nodeSel Last visited page js
+ a.navSel Current page js
+ a.indexmenu_idx_head link style of a namespace with url (headpage) nojs
+ a.indexmenu_idx link style of a namespace without url nojs
+ */
+
+/* dtree properties. No need to change*/
+
+.dtree {
+ font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
+ font-size: 11px;
+ color: __text__;
+ white-space: nowrap;
+ line-height: normal;
+}
+
+.dtree img {
+ border: 0px;
+ vertical-align: top;
+}
+
+/*Properties that can be edit*/
+
+/*Link properties*/
+.dtree a {
+ color: __existing__;
+ text-decoration: none;
+}
+
+/*Link properties*/
+.dtree a.node, .dtree a.nodeSel a.navSel {
+ white-space: nowrap;
+ padding: 1px 2px 1px 2px;
+}
+/* Last visited page highlighting*/
+.dtree a.nodeSel {
+ background-color: __background_alt__;
+}
+/* Current page highlighting*/
+.dtree a.navSel {
+ background-color: __highlight__;
+}
+
+/*
+.dtree .clip {
+}
+*/
+
+/*nojs tree div*/
+.indexmenu_nojs {
+ display: block;
+}
+
+/*Namespace without page link in nojs mode. !important has to be used*/
+div.li a.indexmenu_idx {
+ color: __missing__ !important;
+ text-decoration: none !important;
+ font-weight: bold;
+}
+
+/*Namespace with page link (headpage) in nojs mode. !important has to be used*/
+
+div.li a.indexmenu_idx_head {
+ font-weight: bold;
+}
+
+
+/*Style for admin panel interface*/
+div.dokuwiki div.indexmenu_list_themes {
+ clear: both;
+ border-top: 2px solid __border__;
+ padding-left: 1em;
+}
+
+/*Mouseover property*/
+.dtree a.nodeFdUrl:hover, .dtree a.nodeSel:hover, a.navSel:hover, .dtree a.nodeUrl:hover {
+ color: __existing__;
+ text-decoration: underline;
+ background-color: __background_alt__;
+}
+/*Mouseover property*/
+.dtree a.node:hover {
+ text-decoration: none;
+}
+
+/*tocbullet property*/
+.dtree .indexmenu_tocbullet {
+ position:absolute;
+ background: transparent url(images/toc_bullet.gif) no-repeat scroll;
+ vertical-align: middle;
+ width: 11px;
+ height: 11px;
+}
+
+/*scrolling arrow property*/
+.dtree .indexmenu_larrow {
+ position:absolute;
+ filter:alpha(opacity=60);-moz-opacity:.60;opacity:.60;
+ background:transparent url(images/larrow.gif) repeat-y scroll;
+ padding-left:22px;
+ z-index:100;
+}
+
+/*toc property*/
+.indexmenu_toc {
+ font-size: 80%;
+ line-height: 1.2em;
+ white-space: normal;
+ overflow: hidden;
+ width: 200px !important;
+ z-index:100 !important;
+ word-wrap: break-word;
+}
+
+.indexmenu_toc .indexmenu_toc_inside {
+ border: 1px solid __border__;
+ background-color: __background__;
+ text-align: left;
+ padding: 0.5em 0 0.7em 0;
+ max-height: 300px;
+ height: expression( this.scrollHeight > 300 ? "300px" : "auto" );
+ overflow: auto;
+}
+
+.dtree .indexmenu_rarrow {
+ position:absolute;
+ background:white url(images/rarrow.gif) no-repeat scroll;
+ width:11px;
+ height:15px;
+}
+
+.indexmenu_rmenu {
+ position: absolute;
+ z-index: 100;
+ background-color: #fff;
+ border: 1px solid black;
+ font-size: 80%;
+ line-height: 100%;
+ padding-bottom: 5px;
+}
+
+.indexmenu_rmenuhead {
+ background-color: #CCFFCC;
+ border-bottom: 1px solid __text__;
+ color: __text__;
+ font-size: 90%;
+ margin: 0pt;
+ text-align: center;
+ padding: 1px 5px;
+ vertical-align: middle;
+ overflow: hidden;
+ width: 80px;
+}
+
+.indexmenu_rmenu ul,.indexmenu_rmenu li {
+ list-style-type: none !important;
+ list-style-image: none !important;
+ color: #000 !important;
+ margin: 2px !important;
+ text-align: center;
+}
+
+.indexmenu_rmenu a:hover {
+ background-color: #000 !important;
+ color: #fff !important;
+}
+
+.indexmenu_opts {
+ font-size: 80%;
+}
+
+.dtree .emptynode {
+ background: transparent url(images/empty.gif) no-repeat scroll;
+ display: inline;
+ padding: 1px 8px;
+ width: 16px;
+ height: 16px;
+ vertical-align: top;
+ /* needed by ie7 */
+ zoom: 1;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/syntax/indexmenu.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/syntax/indexmenu.php
new file mode 100644
index 000000000..a1653437d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/syntax/indexmenu.php
@@ -0,0 +1,720 @@
+<?php
+/**
+ * Info Indexmenu: Displays the index of a specified namespace.
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Samuele Tognini <samuele@netsons.org>
+ *
+ */
+
+if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+if(!defined('INDEXMENU_IMG_ABSDIR')) define('INDEXMENU_IMG_ABSDIR',DOKU_PLUGIN."indexmenu/images");
+require_once(DOKU_PLUGIN.'syntax.php');
+require_once(DOKU_INC.'inc/search.php');
+
+/**
+ * All DokuWiki plugins to extend the parser/rendering mechanism
+ * need to inherit from this class
+ */
+class syntax_plugin_indexmenu_indexmenu extends DokuWiki_Syntax_Plugin {
+
+ var $sort=false;
+ var $msort=false;
+ var $rsort=false;
+ var $nsort=false;
+
+ /**
+ * return some info
+ */
+ function getInfo(){
+ return array(
+ 'author' => 'Samuele Tognini',
+ 'email' => 'samuele@netsons.org',
+ 'date' => rtrim(io_readFile(DOKU_PLUGIN.'indexmenu/VERSION.txt')),
+ 'name' => 'Indexmenu',
+ 'desc' => 'Insert the index of a specified namespace.',
+ 'url' => 'http://wiki.splitbrain.org/plugin:indexmenu'
+ );
+ }
+
+ /**
+ * What kind of syntax are we?
+ */
+ function getType(){
+ return 'substition';
+ }
+
+ function getPType(){
+ return 'block';
+ }
+
+ /**
+ * Where to sort in?
+ */
+ function getSort(){
+ return 138;
+ }
+
+ /**
+ * Connect pattern to lexer
+ */
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern('{{indexmenu>.+?}}',$mode,'plugin_indexmenu_indexmenu');
+ }
+
+ /**
+ * Handle the match
+ */
+ function handle($match, $state, $pos, &$handler){
+ $theme="default";
+ $ns=".";
+ $level = -1;
+ $nons = true;
+ $gen_id='random';
+ $maxjs=0;
+ $max=0;
+ $jsajax='';
+ $nss=array();
+ $match = substr($match,12,-2);
+ //split namespace,level,theme
+ $match = preg_split('/\|/u', $match, 2);
+ //split options
+ $opts=preg_split('/ /u',$match[1]);
+ //Context option
+ $context = in_array('context',$opts);
+ //split optional namespaces
+ $nss_temp=preg_split("/ /u",$match[0],-1,PREG_SPLIT_NO_EMPTY);
+ //Array optional namespace => level
+ for ($i = 1; $i < count($nss_temp); $i++) {
+ $nsss=preg_split("/#/u",$nss_temp[$i]);
+ if (!$context) {
+ $nsss[0] = $this->_parse_ns($nsss[0]);
+ }
+ $nss[]=array($nsss[0],(is_numeric($nsss[1])) ? $nsss[1] : $level);
+ }
+ //split main requested namespace
+ if (preg_match('/(.*)#(\S*)/u',$nss_temp[0],$ns_opt)) {
+ //split level
+ $ns = $ns_opt[1];
+ if (is_numeric($ns_opt[2])) $level=$ns_opt[2];
+ } else {
+ $ns = $nss_temp[0];
+ }
+ if (!$context) {
+ $ns = $this->_parse_ns($ns);
+ }
+ //nocookie option (disable for uncached pages)
+ $nocookie=$context||in_array('nocookie',$opts);
+ //noscroll option
+ $noscroll=in_array('noscroll',$opts);
+ //Open at current namespace option
+ $navbar=in_array('navbar',$opts);
+ //no namespaces options
+ $nons = in_array('nons',$opts);
+ //no pages option
+ $nopg = in_array('nopg',$opts);
+ //disable toc preview
+ $notoc = in_array('notoc',$opts);
+ //Main sort method
+ if (in_array('tsort',$opts)) {
+ $sort='t';
+ } elseif (in_array('dsort',$opts)) {
+ $sort='d';
+ } else $sort=0;
+ //Directory sort
+ $nsort=in_array('nsort',$opts);
+ //Metadata sort method
+ if ($msort = in_array('msort',$opts)) {
+ $msort='indexmenu_n';
+ } elseif (preg_match('/msort#(\S+)/u',$match[1],$msort_tmp) >0) $msort=str_replace(':',' ',$msort_tmp[1]);
+ //reverse sort
+ $rsort=in_array('rsort',$opts);
+ //javascript option
+ if (!$js= in_array('js',$opts)) {
+ //split theme
+ if (preg_match('/js#(\S*)/u',$match[1],$tmp_theme) > 0) {
+ if (is_dir(INDEXMENU_IMG_ABSDIR."/".$tmp_theme[1])) {
+ $theme=$tmp_theme[1];
+ }
+ $js=true;
+ }
+ }
+ //id generation method
+ if (preg_match('/id#(\S+)/u',$match[1],$id) >0) $gen_id=$id[1];
+ //max option
+ if (preg_match('/max#(\d+)($|\s+|#(\d+))/u',$match[1],$maxtmp) >0) {
+ $max=$maxtmp[1];
+ if ($maxtmp[3]) $jsajax = "&max=".$maxtmp[3];
+ //disable cookie to avoid javascript errors
+ $nocookie=true;
+ }
+ if ($sort) $jsajax .= "&sort=".$sort;
+ if ($msort) $jsajax .= "&msort=".$msort;
+ if ($rsort) $jsajax .= "&rsort=1";
+ if ($nsort) $jsajax .= "&nsort=1";
+ if ($nopg) $jsajax .= "&nopg=1";
+ //max js option
+ if (preg_match('/maxjs#(\d+)/u',$match[1],$maxtmp) >0) $maxjs=$maxtmp[1];
+ //js options
+ $js_opts=compact('theme','gen_id','nocookie','navbar','noscroll','maxjs','notoc','jsajax','context');
+ return array($ns,
+ $js_opts,
+ $sort,
+ $msort,
+ $rsort,
+ $nsort,
+ array('level' => $level,
+ 'nons' => $nons,
+ 'nopg' => $nopg,
+ 'nss' => $nss,
+ 'max' => $max,
+ 'js' => $js,
+ 'skip_index' => $this->getConf('skip_index'),
+ 'skip_file' => $this->getConf('skip_file'),
+ 'headpage' => $this->getConf('headpage'),
+ 'hide_headpage' => $this->getConf('hide_headpage')
+ )
+ );
+ }
+
+ /**
+ * Render output
+ */
+ function render($mode, &$renderer, $data) {
+ global $ACT;
+ global $conf;
+ global $INFO;
+ if($mode == 'xhtml'){
+ if ($ACT == 'preview') {
+ //Check user permission to display indexmenu in a preview page
+ if( $this->getConf('only_admins') &&
+ $conf['useacl'] &&
+ $INFO['perm'] < AUTH_ADMIN)
+ return false;
+ //disable cookies
+ $data[1]['nocookie']=true;
+ }
+ //Navbar with nojs
+ if ($data[1]['navbar'] && !$data[6]['js']) {
+ if (!isset($data[0])) $data[0]='..';
+ $data[6]['nss'][]=array(getNS($INFO['id']));
+ $renderer->info['cache'] = FALSE;
+ }
+
+ if ($data[1]['context']) {
+ //resolve current id relative namespaces
+ $data[0]=$this->_parse_ns($data[0],$INFO['id']);
+ foreach ($data[6]['nss'] as $key=>$value) {
+ $data[6]['nss'][$key][0] = $this->_parse_ns($value[0],$INFO['id']);
+ }
+ $renderer->info['cache'] = FALSE;
+ }
+ $n = $this->_indexmenu($data);
+ if (!@$n) {
+ $n = $this->getConf('empty_msg');
+ $n = str_replace('{{ns}}',cleanID($data[0]),$n);
+ $n = p_render('xhtml',p_get_instructions($n),$info);
+ }
+ $renderer->doc .= $n;
+ return true;
+ } else if ($mode == 'metadata') {
+ if (!($data[1]['navbar'] && !$data[6]['js']) && !$data[1]['context']) {
+ //this is an indexmenu page that needs the PARSER_CACHE_USE event trigger;
+ $renderer->meta['indexmenu'] = TRUE;
+ }
+ $renderer->doc .= ((empty($data[0])) ? $conf['title'] : nons($data[0])) ." index\n\n";
+ unset($renderer->persistent['indexmenu']);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Return the index
+ * @author Samuele Tognini <samuele@netsons.org>
+ *
+ * This function is a simple hack of Dokuwiki html_index($ns)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _indexmenu($myns) {
+ global $conf;
+ $ns = $myns[0];
+ $js_opts=$myns[1];
+ $this->sort = $myns[2];
+ $this->msort = $myns[3];
+ $this->rsort = $myns[4];
+ $this->nsort = $myns[5];
+ $opts = $myns[6];
+ $output=false;
+ $data = array();
+ $js_name="indexmenu_";
+ $fsdir="/".utf8_encodeFN(str_replace(':','/',$ns));
+ if ($this->sort || $this->msort || $this->rsort) {
+ $custsrch=$this->_search($data,$conf['datadir'],array($this,'_search_index'),$opts,$fsdir);
+ } else {
+ search($data,$conf['datadir'],array($this,'_search_index'),$opts,$fsdir);
+ }
+ if (!$data) return false;
+
+ // Id generation method
+ if (is_numeric($js_opts['gen_id'])) {
+ $js_name .= $js_opts['gen_id'];
+ } elseif ($js_opts['gen_id'] == 'ns') {
+ $js_name .= sprintf("%u",crc32($ns));
+ } else {
+ $js_name .= uniqid(rand());
+ }
+
+ //javascript index
+ if ($opts['js']) {
+ $ns = str_replace('/',':',$ns);
+ $output_tmp=$this->_jstree($data,$ns,$js_opts,$js_name,$opts['max']);
+ //remove unwanted nodes from standard index
+ $this->_clean_data($data);
+ } else {
+ $output .= "<script type='text/javascript' charset='utf-8'>\n";
+ $output .= "<!--//--><![CDATA[//><!--\n";
+ $output .= "indexmenu_nojsqueue.push(new Array('".$js_name."','".utf8_encodeFN($js_opts['jsajax'])."'));\n";
+ $output .= "addInitEvent(function(){indexmenu_loadJs(DOKU_BASE+'lib/plugins/indexmenu/nojsindex.js');});\n";
+ $output .= "//--><!]]>\n";
+ $output .= "</script>\n";
+ }
+ //Nojs dokuwiki index
+ $output.="\n".'<div id="nojs_'.$js_name.'" class="indexmenu_nojs"';
+ $output.=">\n";
+ $output.=html_buildlist($data,'idx',array($this,"_html_list_index"),"html_li_index");
+ $output.="</div>\n";
+ $output.=$output_tmp;
+ return $output;
+ }
+
+ /**
+ * Build the browsable index of pages using javascript
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _jstree($data,$ns,$js_opts,$js_name,$max) {
+ global $conf;
+ $hns=false;
+ if (empty($data)) return false;
+ //Render requested ns as root
+ $headpage=$this->getConf('headpage');
+ if (empty($ns) && !empty($headpage)) $headpage.=','.$conf['start'];
+ $title=$this->_getTitle($ns,$headpage,$hns);
+ if (empty($title)) {
+ (empty($ns)) ? $title = htmlspecialchars($conf['title'],ENT_QUOTES) : $title=$ns;
+ }
+ $out = "<script type='text/javascript' charset='utf-8'>\n";
+ $out .= "<!--//--><![CDATA[//><!--\n";
+ $out .= "var $js_name = new dTree('".$js_name."','".$js_opts['theme']."');\n";
+ $sepchar = idfilter(':');
+ $out .= "$js_name.config.urlbase='".substr(wl(":"), 0, -1)."';\n";
+ $out .= "$js_name.config.sepchar='".$sepchar."';\n";
+ if ($js_opts['notoc']) $out .="$js_name.config.toc=false;\n";
+ if ($js_opts['nocookie']) $out .="$js_name.config.useCookies=false;\n";
+ if ($js_opts['noscroll']) $out .="$js_name.config.scroll=false;\n";
+ if ($js_opts['maxjs'] > 0) $out .= "$js_name.config.maxjs=".$js_opts['maxjs'].";\n";
+ if (!empty($js_opts['jsajax'])) $out .= "$js_name.config.jsajax='".utf8_encodeFN($js_opts['jsajax'])."';\n";
+ $out .= $js_name.".add('".idfilter(cleanID($ns))."',0,-1,'".$title."'";
+ if ($hns) $out .= ",'".idfilter(cleanID($hns))."'";
+ $out .= ");\n";
+ $anodes = $this->_jsnodes($data,$js_name);
+ $out .= $anodes[0];
+ $out .= "document.write(".$js_name.");\n";
+ $out .= "addInitEvent(function(){".$js_name.".init(";
+ $out .= (int) is_file(INDEXMENU_IMG_ABSDIR.'/'.$js_opts['theme'].'/style.css').",";
+ $out .= (int) $js_opts['nocookie'].",";
+ $out .= '"'.$anodes[1].'",';
+ $out .= (int) $js_opts['navbar'].",$max";
+ $out .= ");});\n";
+ $out .= "//--><!]]>\n";
+ $out .= "</script>\n";
+ return $out;
+ }
+
+ /**
+ * Return array of javascript nodes and nodes to open.
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _jsnodes($data,$js_name,$noajax=1) {
+ if (empty($data)) return false;
+ //Array of nodes to check
+ $q=array('0');
+ //Current open node
+ $node=0;
+ $out='';
+ $extra='';
+ if ($noajax) {
+ $jscmd=$js_name.".add";
+ $com=";\n";
+ } else {
+ $jscmd="new Array ";
+ $com=",";
+ }
+ foreach ($data as $i=>$item){
+ $i++;
+ //Remove already processed nodes (greater level = lower level)
+ while ($item['level'] <= $data[end($q)-1]['level']) {
+ array_pop($q);
+ }
+
+ //till i found its father node
+ if ($item['level']==1) {
+ //root node
+ $father='0';
+ } else {
+ //Father node
+ $father=end($q);
+ }
+ //add node and its options
+ if ($item['type'] == 'd' ) {
+ //Search the lowest open node of a tree branch in order to open it.
+ if ($item['open']) ($item['level'] < $data[$node]['level']) ? $node=$i : $extra .= "$i ";
+ //insert node in last position
+ array_push($q,$i);
+ }
+ $out .= $jscmd."('".idfilter($item['id'])."',$i,".$father.",'".$item['title']."'";
+ //hns
+ ($item['hns']) ? $out .= ",'".idfilter($item['hns'])."'" : $out .= ",0";
+ ($item['type'] == 'd' || $item['type']=='l') ? $out .= ",1" : $out .= ",0";
+ //MAX option
+ ($item['type']=='l') ? $out .= ",1" : $out .= ",0";
+ $out .= ")".$com;
+ }
+ $extra=rtrim($extra,' ');
+ return array($out,$extra);
+ }
+ /**
+ * Get page title, checking for headpages
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _getTitle ($ns,$headpage,&$hns) {
+ global $conf;
+ $hns=false;
+ $title=noNS($ns);
+ if (empty($headpage)) return $title;
+ $ahp=explode(",",$headpage);
+ foreach ($ahp as $hp) {
+ switch ($hp) {
+ case ":inside:":
+ $page=$ns.":".noNS($ns);
+ break;
+ case ":same:":
+ $page=$ns;
+ break;
+ //it's an inside start
+ case ":start:":
+ $page=ltrim($ns.":".$conf['start'],":");
+ break;
+ //inside pages
+ default:
+ $page=$ns.":".$hp;
+ }
+ //check headpage
+ if (@file_exists(wikiFN($page)) && auth_quickaclcheck($page) >= AUTH_READ) {
+ if ($conf['useheading'] && $title_tmp=p_get_first_heading($page,FALSE)) $title=$title_tmp;
+ $title=htmlspecialchars($title,ENT_QUOTES);
+ $hns=$page;
+ //headpage found, exit for
+ break;
+ }
+ }
+ return $title;
+ }
+
+ /**
+ * Parse namespace request
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _parse_ns ($ns,$id=FALSE) {
+ if (!$id) {
+ global $ID;
+ $id = $ID;
+ }
+ //Just for old reelases compatibility
+ if (empty($ns) || $ns == '..') $ns=":..";
+ return resolve_id(getNS($id),$ns);
+ }
+
+ /**
+ * Clean index data from unwanted nodes in nojs mode.
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _clean_data(&$data) {
+ foreach ($data as $i=>$item) {
+ //closed node
+ if ($item['type'] == "d" && !$item['open']) {
+ $a=$i+1;
+ $level=$data[$i]['level'];
+ //search and remove every lower and closed nodes
+ while ($data[$a]['level'] > $level && !$data[$a]['open']) {
+ unset($data[$a]);
+ $a++;
+ }
+ }
+ $i++;
+ }
+ }
+
+ /**
+ * Build the browsable index of pages
+ *
+ * $opts['ns'] is the current namespace
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * modified by Samuele Tognini <samuele@netsons.org>
+ */
+ function _search_index(&$data,$base,$file,$type,$lvl,$opts){
+ global $conf;
+ $hns=false;
+ $return=false;
+ $isopen=false;
+ $skip_index=$opts['skip_index'];
+ $skip_file=$opts['skip_file'];
+ $headpage=$opts['headpage'];
+ $id = pathID($file);
+ if($type == 'd'){
+ // Skip folders in plugin conf
+ if (!empty($skip_index) &&
+ preg_match($skip_index, $id))
+ return false;
+ //check ACL (for sneaky_index namespaces too).
+ if ($this->getConf('sneaky_index') && auth_quickaclcheck($id.':') < AUTH_READ) return false;
+ //Open requested level
+ if ($opts['level'] > $lvl || $opts['level'] == -1) $isopen=true;
+ //Search optional namespaces
+ if (!empty($opts['nss'])){
+ $nss=$opts['nss'];
+ for ($a=0; $a<count($nss);$a++) {
+ if (preg_match("/^".$id."($|:.+)/i",$nss[$a][0],$match)) {
+ //It contains an optional namespace
+ $isopen=true;
+ } elseif (preg_match("/^".$nss[$a][0]."(:.*)/i",$id,$match)) {
+ //It's inside an optional namespace
+ if ($nss[$a][1] == -1 || substr_count($match[1],":") < $nss[$a][1]) {
+ $isopen=true;
+ } else {
+ $isopen=false;
+ }
+ }
+ }
+ }
+ if ($opts['nons']) {
+ return $isopen;
+ } elseif ($opts['max'] >0 && !$isopen && $lvl >= $opts['max']) {
+ $isopen=false;
+ //Stop recursive searching
+ $return=false;
+ //change type
+ $type="l";
+ } elseif ($opts['js']) {
+ $return=true;
+ } else {
+ $return=$isopen;
+ }
+ //Set title and headpage
+ $title=$this->_getTitle($id,$headpage,$hns);
+ if (!$hns && $opts['nopg']) $hns=$id.":".$conf['start'];
+ } else {
+ //Nopg.Dont show pages
+ if ($opts['nopg']) return false;
+ $return=true;
+ //Nons.Set all pages at first level
+ if ($opts['nons']) $lvl=1;
+ //don't add
+ if (substr($file,-4) != '.txt') return false;
+ //check hiddens and acl
+ if (isHiddenPage($id) || auth_quickaclcheck($id) < AUTH_READ) return false;
+ //Skip files in plugin conf
+ if (!empty($skip_file) &&
+ preg_match($skip_file, $id))
+ return false;
+ //Skip headpages to hide
+ if (!$opts['nons'] &&
+ !empty($headpage) &&
+ $opts['hide_headpage']) {
+ if ($id==$conf['start']) return false;
+ $ahp=explode(",",$headpage);
+ foreach ($ahp as $hp) {
+ switch ($hp) {
+ case ":inside:":
+ if (noNS($id)==noNS(getNS($id))) return false;
+ break;
+ case ":same:":
+ if (@is_dir(dirname(wikiFN($id))."/".utf8_encodeFN(noNS($id)))) return false;
+ break;
+ //it' s an inside start
+ case ":start:":
+ if (noNS($id)==$conf['start']) return false;
+ break;
+ default:
+ if (noNS($id)==cleanID($hp)) return false;
+ }
+ }
+ }
+ //Set title
+ if (!$conf['useheading'] || !$title=p_get_first_heading($id,FALSE)) $title=noNS($id);
+ $title=htmlspecialchars($title,ENT_QUOTES);
+ }
+
+ $item = array( 'id' => $id,
+ 'type' => $type,
+ 'level' => $lvl,
+ 'open' => $isopen,
+ 'title' => $title,
+ 'hns' => $hns,
+ 'file' => $file,
+ 'return' => $return
+ );
+ $item['sort'] = $this->_setorder($item);
+ $data[] = $item;
+ return $return;
+ }
+
+
+ /**
+ * Index item formatter
+ *
+ * User function for html_buildlist()
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * modified by Samuele Tognini <samuele@netsons.org>
+ */
+ function _html_list_index($item){
+ $ret = '';
+ //namespace
+ if($item['type']=='d' || $item['type']=='l'){
+ $link=$item['id'];
+ $more='idx='.$item['id'];
+ //namespace link
+ if ($item['hns']) {
+ $link=$item['hns'];
+ $tagid="indexmenu_idx_head";
+ $more='';
+ } else {
+ //namespace with headpage
+ $tagid="indexmenu_idx";
+ if ($item['open']) $tagid.=' open';
+ }
+ $ret .= '<a href="'.wl($link,$more).'" class="'.$tagid.'">';
+ $ret .= $item['title'];
+ $ret .= '</a>';
+ }else{
+ //page link
+ $ret .= html_wikilink(':'.$item['id']);
+ }
+ return $ret;
+ }
+
+
+ /**
+ * recurse direcory
+ *
+ * This function recurses into a given base directory
+ * and calls the supplied function for each file and directory
+ *
+ * @param array ref $data The results of the search are stored here
+ * @param string $base Where to start the search
+ * @param callback $func Callback (function name or arayy with object,method)
+ * @param string $dir Current directory beyond $base
+ * @param int $lvl Recursion Level
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * modified by Samuele Tognini <samuele@netsons.org>
+ */
+ function _search(&$data,$base,$func,$opts,$dir='',$lvl=1){
+ $dirs = array();
+ $files = array();
+ $files_tmp=array();
+ $dirs_tmp=array();
+
+ //read in directories and files
+ $dh = @opendir($base.'/'.$dir);
+ if(!$dh) return;
+ while(($file = readdir($dh)) !== false){
+ //skip hidden files and upper dirs
+ if(preg_match('/^[\._]/',$file)) continue;
+ if(is_dir($base.'/'.$dir.'/'.$file)){
+ $dirs[] = $dir.'/'.$file;
+ continue;
+ }
+ $files[] = $dir.'/'.$file;
+ }
+ closedir($dh);
+ //Sort dirs
+ if ($this->nsort) {
+ foreach($dirs as $dir){
+ search_callback($func,$dirs_tmp,$base,$dir,'d',$lvl,$opts);
+ }
+ usort($dirs_tmp,array($this,"_cmp"));
+ foreach ($dirs_tmp as $dir) {
+ $data[]=$dir;
+ if ($dir['return']) $this->_search($data,$base,$func,$opts,$dir['file'],$lvl+1);
+ }
+ } else {
+ sort($dirs);
+ foreach($dirs as $dir){
+ if (search_callback($func,$data,$base,$dir,'d',$lvl,$opts)) $this->_search($data,$base,$func,$opts,$dir,$lvl+1);
+ }
+ }
+ //Sort files
+ foreach($files as $file){
+ search_callback($func,$files_tmp,$base,$file,'f',$lvl,$opts);
+ }
+ usort($files_tmp,array($this,"_cmp"));
+ if (empty($dirs) && empty($files_tmp)) {
+ $v=end($data);
+ if (!$v['hns']) array_pop($data);
+ } else {
+ $data=array_merge($data,$files_tmp);
+ }
+ return true;
+ }
+
+ /**
+ * Sort nodes
+ *
+ */
+ function _cmp($a, $b) {
+ if ($this->rsort) {
+ return strnatcasecmp($b['sort'], $a['sort']);
+ } else {
+ return strnatcasecmp($a['sort'], $b['sort']);
+ }
+ }
+
+
+ /**
+ * Add sort information to item.
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _setorder($item) {
+ $sort=false;
+ if ($item['type']=='d') {
+ //Fake order info when nsort is not requested
+ ($this->nsort) ? $page=$item['hns'] : $sort=0;
+ }
+ if ($item['type']=='f') $page=$item['id'];
+ if ($page) {
+ if ($this->msort) $sort=p_get_metadata($page,$this->msort);
+ if (!$sort && $this->sort) {
+ switch ($this->sort) {
+ case 't':
+ $sort=$item['title'];
+ break;
+ case 'd':
+ $sort=@filectime(wikiFN($page));
+ break;
+ }
+ }
+ }
+ if ($sort===false) $sort=noNS($item['id']);
+ return $sort;
+ }
+} //Indexmenu class end
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/syntax/tag.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/syntax/tag.php
new file mode 100644
index 000000000..962f7efca
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/syntax/tag.php
@@ -0,0 +1,70 @@
+<?php
+
+/**
+ * Info Indexmenu tag: Tag a page with a sort number.
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Samuele Tognini <samuele@netsons.org>
+ *
+ */
+
+if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'syntax.php');
+
+/**
+ * All DokuWiki plugins to extend the parser/rendering mechanism
+ * need to inherit from this class
+ */
+class syntax_plugin_indexmenu_tag extends DokuWiki_Syntax_Plugin {
+
+ /**
+ * return some info
+ */
+ function getInfo(){
+ return array(
+ 'author' => 'Samuele Tognini',
+ 'email' => 'samuele@netsons.org',
+ 'date' => rtrim(io_readFile(DOKU_PLUGIN.'indexmenu/VERSION.txt')),
+ 'name' => 'Indexmenu tag',
+ 'desc' => 'Indexmenu tag plugin.',
+ 'url' => 'http://wiki.splitbrain.org/plugin:indexmenu'
+ );
+ }
+
+ /**
+ * What kind of syntax are we?
+ */
+ function getType(){
+ return 'substition';
+ }
+
+ /**
+ * Where to sort in?
+ */
+ function getSort(){
+ return 139;
+ }
+
+ /**
+ * Connect pattern to lexer
+ */
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern('{{indexmenu_n>.+?}}',$mode,'plugin_indexmenu_tag');
+ }
+
+ /**
+ * Handle the match
+ */
+ function handle($match, $state, $pos, &$handler){
+ $match = substr($match,14,-2);
+ return array($match);
+ }
+
+ /**
+ * Render output
+ */
+ function render($mode, &$renderer, $data) {
+ if (is_numeric($data[0])) $renderer->meta['indexmenu_n'] = $data[0];;
+ }
+} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/info/syntax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/info/syntax.php
new file mode 100644
index 000000000..dc0a7d2fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/info/syntax.php
@@ -0,0 +1,259 @@
+<?php
+/**
+ * Info Plugin: Displays information about various DokuWiki internals
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Esther Brunner <wikidesign@gmail.com>
+ */
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'syntax.php');
+
+/**
+ * All DokuWiki plugins to extend the parser/rendering mechanism
+ * need to inherit from this class
+ */
+class syntax_plugin_info extends DokuWiki_Syntax_Plugin {
+
+ /**
+ * return some info
+ */
+ function getInfo(){
+ return array(
+ 'author' => 'Andreas Gohr',
+ 'email' => 'andi@splitbrain.org',
+ 'date' => '2008-09-12',
+ 'name' => 'Info Plugin',
+ 'desc' => 'Displays information about various DokuWiki internals',
+ 'url' => 'http://dokuwiki.org/plugin:info',
+ );
+ }
+
+ /**
+ * What kind of syntax are we?
+ */
+ function getType(){
+ return 'substition';
+ }
+
+ /**
+ * What about paragraphs?
+ */
+ function getPType(){
+ return 'block';
+ }
+
+ /**
+ * Where to sort in?
+ */
+ function getSort(){
+ return 155;
+ }
+
+
+ /**
+ * Connect pattern to lexer
+ */
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern('~~INFO:\w+~~',$mode,'plugin_info');
+ }
+
+
+ /**
+ * Handle the match
+ */
+ function handle($match, $state, $pos, &$handler){
+ $match = substr($match,7,-2); //strip ~~INFO: from start and ~~ from end
+ return array(strtolower($match));
+ }
+
+ /**
+ * Create output
+ */
+ function render($format, &$renderer, $data) {
+ if($format == 'xhtml'){
+ //handle various info stuff
+ switch ($data[0]){
+ case 'version':
+ $renderer->doc .= getVersion();
+ break;
+ case 'syntaxmodes':
+ $renderer->doc .= $this->_syntaxmodes_xhtml();
+ break;
+ case 'syntaxtypes':
+ $renderer->doc .= $this->_syntaxtypes_xhtml();
+ break;
+ case 'syntaxplugins':
+ $this->_plugins_xhtml('syntax', $renderer);
+ break;
+ case 'adminplugins':
+ $this->_plugins_xhtml('admin', $renderer);
+ break;
+ case 'actionplugins':
+ $this->_plugins_xhtml('action', $renderer);
+ break;
+ case 'rendererplugins':
+ $this->_plugins_xhtml('renderer', $renderer);
+ break;
+ case 'helperplugins':
+ $this->_plugins_xhtml('helper', $renderer);
+ break;
+ case 'helpermethods':
+ $this->_helpermethods_xhtml($renderer);
+ break;
+ default:
+ $renderer->doc .= "no info about ".htmlspecialchars($data[0]);
+ }
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * list all installed plugins
+ *
+ * uses some of the original renderer methods
+ */
+ function _plugins_xhtml($type, &$renderer){
+ global $lang;
+ $renderer->doc .= '<ul>';
+
+ $plugins = plugin_list($type);
+ $plginfo = array();
+
+ // remove subparts
+ foreach($plugins as $p){
+ if (!$po =& plugin_load($type,$p)) continue;
+ list($name,$part) = explode('_',$p,2);
+ $plginfo[$name] = $po->getInfo();
+ }
+
+ // list them
+ foreach($plginfo as $info){
+ $renderer->doc .= '<li><div class="li">';
+ $renderer->externallink($info['url'],$info['name']);
+ $renderer->doc .= ' ';
+ $renderer->doc .= '<em>'.$info['date'].'</em>';
+ $renderer->doc .= ' ';
+ $renderer->doc .= $lang['by'];
+ $renderer->doc .= ' ';
+ $renderer->emaillink($info['email'],$info['author']);
+ $renderer->doc .= '<br />';
+ $renderer->doc .= strtr(hsc($info['desc']),array("\n"=>"<br />"));
+ $renderer->doc .= '</div></li>';
+ unset($po);
+ }
+
+ $renderer->doc .= '</ul>';
+ }
+
+ /**
+ * list all installed plugins
+ *
+ * uses some of the original renderer methods
+ */
+ function _helpermethods_xhtml(&$renderer){
+ global $lang;
+
+ $plugins = plugin_list('helper');
+ foreach($plugins as $p){
+ if (!$po =& plugin_load('helper',$p)) continue;
+
+ if (!method_exists($po, 'getMethods')) continue;
+ $methods = $po->getMethods();
+ $info = $po->getInfo();
+
+ $hid = $this->_addToTOC($info['name'], 2, $renderer);
+ $doc = '<h2><a name="'.$hid.'" id="'.$hid.'">'.hsc($info['name']).'</a></h2>';
+ $doc .= '<div class="level2">';
+ $doc .= '<p>'.strtr(hsc($info['desc']), array("\n"=>"<br />")).'</p>';
+ $doc .= '<pre class="code">$'.$p." =& plugin_load('helper', '".$p."');</pre>";
+ $doc .= '</div>';
+ foreach ($methods as $method){
+ $title = '$'.$p.'->'.$method['name'].'()';
+ $hid = $this->_addToTOC($title, 3, $renderer);
+ $doc .= '<h3><a name="'.$hid.'" id="'.$hid.'">'.hsc($title).'</a></h3>';
+ $doc .= '<div class="level3">';
+ $doc .= '<table class="inline"><tbody>';
+ $doc .= '<tr><th>Description</th><td colspan="2">'.$method['desc'].
+ '</td></tr>';
+ if ($method['params']){
+ $c = count($method['params']);
+ $doc .= '<tr><th rowspan="'.$c.'">Parameters</th><td>';
+ $params = array();
+ foreach ($method['params'] as $desc => $type){
+ $params[] = hsc($desc).'</td><td>'.hsc($type);
+ }
+ $doc .= join($params, '</td></tr><tr><td>').'</td></tr>';
+ }
+ if ($method['return']){
+ $doc .= '<tr><th>Return value</th><td>'.hsc(key($method['return'])).
+ '</td><td>'.hsc(current($method['return'])).'</td></tr>';
+ }
+ $doc .= '</tbody></table>';
+ $doc .= '</div>';
+ }
+ unset($po);
+
+ $renderer->doc .= $doc;
+ }
+ }
+
+ /**
+ * lists all known syntax types and their registered modes
+ */
+ function _syntaxtypes_xhtml(){
+ global $PARSER_MODES;
+ $doc = '';
+
+ $doc .= '<table class="inline"><tbody>';
+ foreach($PARSER_MODES as $mode => $modes){
+ $doc .= '<tr>';
+ $doc .= '<td class="leftalign">';
+ $doc .= $mode;
+ $doc .= '</td>';
+ $doc .= '<td class="leftalign">';
+ $doc .= join(', ',$modes);
+ $doc .= '</td>';
+ $doc .= '</tr>';
+ }
+ $doc .= '</tbody></table>';
+ return $doc;
+ }
+
+ /**
+ * lists all known syntax modes and their sorting value
+ */
+ function _syntaxmodes_xhtml(){
+ $modes = p_get_parsermodes();
+ $doc = '';
+
+ foreach ($modes as $mode){
+ $doc .= $mode['mode'].' ('.$mode['sort'].'), ';
+ }
+ return $doc;
+ }
+
+ /**
+ * Adds a TOC item
+ */
+ function _addToTOC($text, $level, &$renderer){
+ global $conf;
+
+ if (($level >= $conf['toptoclevel']) && ($level <= $conf['maxtoclevel'])){
+ $hid = $renderer->_headerToLink($text, 'true');
+ $renderer->toc[] = array(
+ 'hid' => $hid,
+ 'title' => $text,
+ 'type' => 'ul',
+ 'level' => $level - $conf['toptoclevel'] + 1
+ );
+ }
+ return $hid;
+ }
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/important.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/important.png
new file mode 100644
index 000000000..dc8c8a457
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/important.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/note.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/note.png
new file mode 100644
index 000000000..df1e0a926
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/note.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_important.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_important.png
new file mode 100644
index 000000000..d853518de
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_important.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_note.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_note.png
new file mode 100644
index 000000000..f5c931603
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_note.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_tip.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_tip.png
new file mode 100644
index 000000000..f127e91c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_tip.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_warning.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_warning.png
new file mode 100644
index 000000000..892c83393
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_warning.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tip.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tip.png
new file mode 100644
index 000000000..2000f2085
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tip.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/warning.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/warning.png
new file mode 100644
index 000000000..3c8a37df5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/warning.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/info.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/info.txt
new file mode 100644
index 000000000..5226345f4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/info.txt
@@ -0,0 +1,8 @@
+# General Plugin Info do not edit
+
+author Olivier Cortès / Eric Hameleers / Christopher Smith / Aurélien Bompard
+email olive@deep-ocean.net
+date 2009-06-15
+name Note Plugin
+desc Add Note/Important/Tip/Warning Capability (DIV+CSS box)
+url http://www.dokuwiki.org/plugin:note
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/script.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/script.js
new file mode 100644
index 000000000..c21120727
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/script.js
@@ -0,0 +1,36 @@
+/* Add Note buttons to the toolbar */
+/* from http://wiki.splitbrain.org/wiki:tips:toolbarbutton */
+
+/* Disabled because this does not allow to select a text and turn it into a note like the type:format does
+var notes_arr = new Array(); // key = insertion string , value = icon filename.
+notes_arr['<note></note>\\n']='tb_note.png';
+notes_arr['<note tip></note>\\n']='tb_tip.png';
+notes_arr['<note important></note>\\n']='tb_important.png';
+notes_arr['<note warning></note>\\n']='tb_warning.png';
+
+toolbar[toolbar.length] = {"type":"picker",
+ "title":"Notes",
+ "icon":"../../plugins/note/images/tb_note.png",
+ "key":"",
+ "list": notes_arr,
+ "icobase":"../plugins/note/images"};
+*/
+
+if(toolbar){
+ toolbar[toolbar.length] = {"type":"format", "title":"note", "key":"",
+ "icon":"../../plugins/note/images/tb_note.png",
+ "open":"<note>", "close":"</note>"
+ };
+ toolbar[toolbar.length] = {"type":"format", "title":"tip", "key":"",
+ "icon":"../../plugins/note/images/tb_tip.png",
+ "open":"<note tip>", "close":"</note>"
+ };
+ toolbar[toolbar.length] = {"type":"format", "title":"important", "key":"",
+ "icon":"../../plugins/note/images/tb_important.png",
+ "open":"<note important>", "close":"</note>"
+ };
+ toolbar[toolbar.length] = {"type":"format", "title":"warning", "key":"",
+ "icon":"../../plugins/note/images/tb_warning.png",
+ "open":"<note warning>", "close":"</note>"
+ };
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/style.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/style.css
new file mode 100644
index 000000000..8b97dea06
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/style.css
@@ -0,0 +1,41 @@
+.noteclassic, .noteimportant, .notewarning, .notetip {
+ margin: 2em;
+ margin-left: auto;
+ margin-right: auto;
+ width: 70% !important;
+ min-height: 40px;
+ clear: both;
+ text-align: justify;
+ vertical-align: middle;
+ border-collapse: collapse;
+ padding: 15px 20px 15px 80px;
+ background-position: 20px 50%;
+ background-repeat: no-repeat;
+ -moz-border-radius: 20px;
+ -khtml-border-radius: 20px;
+ border-radius: 20px;
+}
+
+.noteclassic {
+ /*border: 1px solid #99D;*/
+ background-color: #eef;
+ background-image: url(images/note.png);
+}
+
+.noteimportant {
+ /*border: 1px solid #ff0;*/
+ background-color: #ffc;
+ background-image: url(images/important.png);
+}
+
+.notewarning {
+ /*border: 1px solid #d99;*/
+ background-color: #fdd;
+ background-image: url(images/warning.png);
+}
+
+.notetip {
+ /*border: 1px solid #9d9;*/
+ background-color: #dfd;
+ background-image: url(images/tip.png);
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/syntax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/syntax.php
new file mode 100644
index 000000000..368d0d412
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/syntax.php
@@ -0,0 +1,191 @@
+<?php
+/**
+ * Add Note capability to dokuwiki
+ *
+ * <note>This is note</note>
+ * <note classic>This is note</note>
+ * <note important>This is an important note</note>
+ * <note warning>This is a big warning</note>
+ * <note tip>This is a tip</note>
+ *
+ * by Olivier Cortès <olive@deep-ocean.net>
+ * under the terms of the GNU GPL v2.
+ *
+ * Originaly derived from the work of :
+ * Stephane Chamberland <stephane.chamberland@ec.gc.ca> (Side Notes PlugIn)
+ * Carl-Christian Salvesen <calle@ioslo.net> (Graphviz plugin)
+ *
+ * Contributions by Eric Hameleers <alien [at] slackware [dot] com> :
+ * use <div> instead of <table>,
+ * contain the images and stylesheet inside the plugin,
+ * permit nesting of notes,
+ *
+ * Contributed by Christopher Smith <chris [at] jalakai [dot] co [dot] uk>
+ * fix some parsing problems and a security hole.
+ * make note types case independent
+ * simplify code reading
+ * modernise the plugin for changes/fixes/improvements to the underlying Dokuwiki plugin class,
+ * improve efficiency.
+ *
+ * Contributed by Aurélien Bompard <aurelien [at] bompard [dot] org>
+ * support for the ODT output format.
+ *
+ * @license GNU_GPL_v2
+ * @author Olivier Cortes <olive@deep-ocean.net>
+ */
+
+if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'syntax.php');
+
+
+class syntax_plugin_note extends DokuWiki_Syntax_Plugin {
+
+ var $notes = array(
+ 'noteimportant' => array('important', 'importante'),
+ 'notewarning' => array('warning','bloquante','critique'),
+ 'notetip' => array('tip','tuyau','idée'),
+ 'noteclassic' => array('','classic','classique')
+ );
+
+ var $default = 'noteclassic';
+
+ function getInfo(){
+ return confToHash(dirname(__FILE__).'/info.txt');
+ }
+
+
+ function getType(){ return 'container'; }
+ function getPType(){ return 'normal'; }
+ function getAllowedTypes() {
+ return array('container','substition','protected','disabled','formatting','paragraphs');
+ }
+ function getSort(){ return 195; }
+
+ // override default accepts() method to allow nesting
+ // - ie, to get the plugin accepts its own entry syntax
+ function accepts($mode) {
+ if ($mode == substr(get_class($this), 7)) return true;
+ return parent::accepts($mode);
+ }
+
+ function connectTo($mode) {
+ $this->Lexer->addEntryPattern('<note.*?>(?=.*?</note>)',$mode,'plugin_note');
+ }
+ function postConnect() {
+ $this->Lexer->addExitPattern('</note>','plugin_note');
+ }
+
+ function handle($match, $state, $pos, &$handler){
+
+ switch ($state) {
+
+ case DOKU_LEXER_ENTER :
+ $note = strtolower(trim(substr($match,5,-1)));
+
+ foreach( $this->notes as $class => $names ) {
+ if (in_array($note, $names))
+ return array($state, $class);
+ }
+
+ return array($state, $this->default);
+
+ case DOKU_LEXER_UNMATCHED :
+ return array($state, $match);
+
+ default:
+ return array($state);
+ }
+ }
+
+ function render($mode, &$renderer, $indata) {
+
+ if($mode == 'xhtml'){
+
+ list($state, $data) = $indata;
+
+ switch ($state) {
+ case DOKU_LEXER_ENTER :
+ $renderer->doc .= '<p><div class="'.$data.'">';
+ break;
+
+ case DOKU_LEXER_UNMATCHED :
+ $renderer->doc .= $renderer->_xmlEntities($data);
+ break;
+
+ case DOKU_LEXER_EXIT :
+ $renderer->doc .= "\n</div></p>";
+ break;
+ }
+ return true;
+
+ } elseif ($mode == 'odt'){
+
+ list($state, $data) = $indata;
+
+ switch ($state) {
+ case DOKU_LEXER_ENTER :
+ $type = substr($data, 4);
+ if ($type == "classic") {
+ $type = "note"; // the icon for classic notes is named note.png
+ }
+ $colors = array("note"=>"#eeffff", "warning"=>"#ffdddd", "important"=>"#ffffcc", "tip"=>"#ddffdd");
+ $renderer->autostyles["pluginnote"] = '
+ <style:style style:name="pluginnote" style:family="table">
+ <style:table-properties style:width="15cm" table:align="center" style:shadow="#808080 0.18cm 0.18cm"/>
+ </style:style>';
+ $renderer->autostyles["pluginnote.A"] = '
+ <style:style style:name="pluginnote.A" style:family="table-column">
+ <style:table-column-properties style:column-width="1.5cm"/>
+ </style:style>';
+ $renderer->autostyles["pluginnote.B"] = '
+ <style:style style:name="pluginnote.B" style:family="table-column">
+ <style:table-column-properties style:column-width="13.5cm"/>
+ </style:style>';
+ $renderer->autostyles["pluginnote".$type.".A1"] = '
+ <style:style style:name="pluginnote'.$type.'.A1" style:family="table-cell">
+ <style:table-cell-properties style:vertical-align="middle" fo:padding="0.1cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000" fo:background-color="'.$colors[$type].'"/>
+ </style:style>';
+ $renderer->autostyles["pluginnote".$type.".B1"] = '
+ <style:style style:name="pluginnote'.$type.'.B1" style:family="table-cell">
+ <style:table-cell-properties style:vertical-align="middle" fo:padding="0.3cm" fo:border-left="none" fo:border-right="0.002cm solid #000000" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000" fo:background-color="'.$colors[$type].'"/>
+ </style:style>';
+ // Content
+ $renderer->p_close();
+ $renderer->doc .= '<table:table table:name="" table:style-name="pluginnote">';
+ $renderer->doc .= '<table:table-column table:style-name="pluginnote.A"/>';
+ $renderer->doc .= '<table:table-column table:style-name="pluginnote.B"/>';
+ $renderer->doc .= '<table:table-row>';
+ $renderer->doc .= '<table:table-cell table:style-name="pluginnote'.$type.'.A1" office:value-type="string">';
+ // Don't use p_open, as it's not the same style-name
+ $renderer->doc .= '<text:p text:style-name="Table_20_Contents">';
+ $src = DOKU_PLUGIN."note/images/".$type.".png";
+ $renderer->_odtAddImage($src);
+ $renderer->doc .= '</text:p>';
+ $renderer->doc .= '</table:table-cell>';
+ $renderer->doc .= '<table:table-cell table:style-name="pluginnote'.$type.'.B1" office:value-type="string">';
+ $renderer->p_open();
+ break;
+
+ case DOKU_LEXER_UNMATCHED :
+ $renderer->cdata($data);
+ break;
+
+ case DOKU_LEXER_EXIT :
+ $renderer->p_close();
+ $renderer->doc .= '</table:table-cell>';
+ $renderer->doc .= '</table:table-row>';
+ $renderer->doc .= '</table:table>';
+ $renderer->p_open();
+ break;
+ }
+ return true;
+ }
+
+ // unsupported $mode
+ return false;
+ }
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/ChangeLog.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/ChangeLog.txt
new file mode 100644
index 000000000..4c9835a1d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/ChangeLog.txt
@@ -0,0 +1,255 @@
+2010-07-17 Aurélien Bompard <aurelien@bompard.org>
+
+ * action.php, syntax.php: Better handling of the cache system The
+ template used for the ODT export is now added in the page's
+ dependencies, so the cached ODT page will not be used if the
+ template has been updated.
+
+2010-05-24 Aurélien Bompard <aurelien@bompard.org>
+
+ * lang/ru/lang.php, lang/ru/settings.php: Add translation by Yuri
+ Timofeev
+
+2010-05-12 Aurélien Bompard <aurelien@bompard.org>
+
+ * lang/zh/lang.php, lang/zh/settings.php: Add Chinese translation by
+ lainme
+
+2010-04-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog, ChangeLog.txt: Add .txt to the ChangeLog for our
+ Windows-based friends
+
+2010-04-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog: Cleanup changelog
+
+2010-04-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: Fix a small syntax error
+
+2010-04-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: Better tag replacement in the template ODT file
+
+2010-04-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * README.txt, info.txt: Prepare for a new release
+
+2010-04-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: Add options to cut off a part of the ODT template
+ In an ODT file, the only styles that will be saved are the styles
+ which are applied to some content in the document. If you want to
+ create an empty ODT document for this plugin, and still want to
+ define styles which will be applied to the wiki content, you have to
+ write some dummy text, apply the styles to this text, and surround
+ the text in the DOKUWIKI-ODT-CUT-START and DOKUWIKI-ODT-CUT-STOP
+ tags. This way, the styles will be retained in the ODT file, but the
+ dummy text will be removed on export.
+
+2010-04-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: Better tag replacement in the template ODT file
+
+2010-04-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: Better tag replacement in the template ODT file
+
+2010-04-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: replace with unicode entities instead of HTML (not
+ always defined)
+
+2009-08-15 Martin Braure de Calignon <braure@free.fr>
+
+ * syntax.php: Fix button link to export old revisions
+
+2009-07-02 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog, info.txt: prepare for release
+
+2009-07-02 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog, renderer.php: Fixes from Andy Webber (thanks !)
+
+2009-06-07 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog, renderer.php: use $['savedir'] as suggested on the wiki
+ page
+
+2009-06-07 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog, info.txt: release
+
+2009-06-07 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: add patch by Korsani
+
+2009-06-07 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: typo
+
+2009-02-11 Aurélien Bompard <aurelien@bompard.org>
+
+ * info.txt, renderer.php: Make the renderer class a singleton Only
+ make a single instance of the renderer. This is needed for Dokuwiki
+ >= rc2009-02-06. For details, see:
+ http://bugs.splitbrain.org/index.php?do=details&task_id=1598
+
+2009-02-09 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: Revert "Create zipper on-demand" This reverts
+ commit 5e746e84b62fb0fdcd5607d7f9abc636a7710e2e.
+
+2009-02-08 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: Create zipper on-demand
+
+2009-01-15 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog, info.txt: prepare for new release
+
+2009-01-15 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog, renderer.php: don't compress mimetype declaration
+
+2008-11-11 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: more safeguards. wiki:syntax now passes validators
+
+2008-09-28 Aurélien Bompard <aurelien@bompard.org>
+
+ * lang/ja/lang.php, lang/ja/settings.php: Add Japanese translation
+ from Ikuo Obataya. Thanks !
+
+2008-05-07 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog, info.txt: new release
+
+2008-05-07 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog: update ChangeLog
+
+2008-05-07 Aurélien Bompard <aurelien@bompard.org>
+
+ * lang/es/lang.php, lang/es/settings.php: complete spanish
+ translation
+
+2008-05-07 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php, syntax.php: leftover from history cleaning
+
+2008-05-07 Aurélien Bompard <aurelien@bompard.org>
+
+ * lang/es/lang.php: spanish translation, 1st part
+
+2008-05-06 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog: add changelog in changelog...
+
+2008-05-05 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog: add ChangeLog (thanks to http://josefsson.org/git2cl/)
+
+
+2008-05-05 Aurélien Bompard <aurelien@bompard.org>
+
+ * README.txt, info.txt: update metadata for new release
+
+2008-05-05 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: use new headers/caching system if available
+
+2008-04-22 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: choose appropriate ZipLib file
+
+2008-04-21 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: dokuwiki's future temp dir is data/tmp, not
+ data/temp
+
+2008-04-08 Aurélien Bompard <aurelien@bompard.org>
+
+ * README.txt, TODO, TODO.txt, info.txt: ready for release
+
+2008-04-08 Aurélien Bompard <aurelien@bompard.org>
+
+ * lang/it/lang.php: add italian translation
+
+2008-04-07 Aurélien Bompard <aurelien@bompard.org>
+
+ * README.txt, TODO, info.txt: get ready for release
+
+2008-03-08 Aurélien Bompard <aurelien@bompard.org>
+
+ * .gitignore: ignore Makefile
+
+2008-03-06 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: fix quotes
+
+2008-03-06 root <root@shiva.c-s.fr>
+
+ * renderer.php: extract template before checking for the styles
+
+2008-03-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * syntax.php: leftover
+
+2008-03-05 root <root@shiva.c-s.fr>
+
+ * syntax.php: Revert "leftover" This reverts commit
+ 93d7c67d705f3a6a5847554b15384dc5a1a50de6.
+
+2008-03-05 root <root@shiva.c-s.fr>
+
+ * renderer.php: fix <code> tag in list items
+
+2008-03-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * syntax.php: leftover
+
+2008-03-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: cleanup for patch
+
+2008-03-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * README.txt, info.txt: even better doc
+
+2008-03-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * README.txt: better doc
+
+2008-03-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * README.txt: doc
+
+2008-03-03 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: spit into the fields plugin
+
+2008-03-01 Aurélien Bompard <aurelien@bompard.org>
+
+ * TODO, renderer.php, styles.xml, syntax.php: closer to upstream
+
+2008-03-01 Aurélien Bompard <aurelien@bompard.org>
+
+ * TODO, admin.php, conf/default.php, conf/metadata.php,
+ lang/de/lang.php, lang/en/lang.php, lang/en/settings.php,
+ lang/fr/lang.php, lang/fr/settings.php, renderer.php: niiice :)
+
+2008-02-29 Aurélien Bompard <aurelien@bompard.org>
+
+ * admin.php, lang/en/lang.php: bla
+
+2008-02-28 Aurélien Bompard <aurelien@bompard.org>
+
+ * admin.php, lang/en/lang.php: niice
+
+2008-05-07 Aurélien Bompard <aurelien@bompard.org>
+
+ * initial commit from existing repo
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/README.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/README.txt
new file mode 100644
index 000000000..3d4c97f8d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/README.txt
@@ -0,0 +1,16 @@
+====== Dokuwiki ODT plugin ======
+
+This plugin lets you export wiki pages to ODT, the OpenDocument Text format as
+used by many applications, included OpenOffice.org
+
+Further documentation on the OpenDocument format is available here :
+http://en.wikipedia.org/wiki/OpenDocument
+
+
+===== Official documentation =====
+
+For installation and usage documentation, please refer to
+http://www.dokuwiki.org/plugin:odt
+
+This version of the plugin works with Dokuwiki 2007-06-26 and later.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/ZipLib.class.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/ZipLib.class.php
new file mode 100644
index 000000000..20e74a0e8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/ZipLib.class.php
@@ -0,0 +1,391 @@
+<?php
+
+/**
+ * @author bouchon
+ * @link http://dev.maxg.info
+ * @link http://forum.maxg.info
+ *
+ * Modified for Dokuwiki
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+class ZipLib
+{
+
+ var $datasec, $ctrl_dir = array();
+ var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";
+ var $old_offset = 0; var $dirs = Array(".");
+
+ function get_List($zip_name)
+ {
+ $zip = @fopen($zip_name, 'rb');
+ if(!$zip) return(0);
+ $centd = $this->ReadCentralDir($zip,$zip_name);
+
+ @rewind($zip);
+ @fseek($zip, $centd['offset']);
+
+ for ($i=0; $i<$centd['entries']; $i++)
+ {
+ $header = $this->ReadCentralFileHeaders($zip);
+ $header['index'] = $i;$info['filename'] = $header['filename'];
+ $info['stored_filename'] = $header['stored_filename'];
+ $info['size'] = $header['size'];$info['compressed_size']=$header['compressed_size'];
+ $info['crc'] = strtoupper(dechex( $header['crc'] ));
+ $info['mtime'] = $header['mtime']; $info['comment'] = $header['comment'];
+ $info['folder'] = ($header['external']==0x41FF0010||$header['external']==16)?1:0;
+ $info['index'] = $header['index'];$info['status'] = $header['status'];
+ $ret[]=$info; unset($header);
+ }
+ return $ret;
+ }
+
+ function Add($files,$compact)
+ {
+ if(!is_array($files[0])) $files=Array($files);
+
+ for($i=0;$files[$i];$i++){
+ $fn = $files[$i];
+ if(!in_Array(dirname($fn[0]),$this->dirs))
+ $this->add_Dir(dirname($fn[0]));
+ if(basename($fn[0]))
+ $ret[basename($fn[0])]=$this->add_File($fn[1],$fn[0],$compact);
+ }
+ return $ret;
+ }
+
+ /**
+ * Zips recursively the $folder directory, from the $basedir directory
+ */
+ function Compress($folder, $basedir=null, $parent=null)
+ {
+ $full_path = $basedir."/".$parent.$folder;
+ $zip_path = $parent.$folder;
+ if ($zip_path) {
+ $zip_path .= "/";
+ $this->add_dir($zip_path);
+ }
+ $dir = opendir($full_path);
+ while (false !== ($filename = readdir($dir))) {
+ if ($filename != "." && $filename != "..") {
+ if (is_dir($full_path."/".$filename)) {
+ $this->Compress($filename, $basedir, $zip_path);
+ } else {
+ $content = join('', file($full_path.'/'.$filename));
+ $this->add_File($content, $zip_path.$filename);
+ }
+ }
+ }
+ }
+
+ /**
+ * Returns the Zip file
+ */
+ function get_file()
+ {
+ $data = implode('', $this -> datasec);
+ $ctrldir = implode('', $this -> ctrl_dir);
+
+ return $data . $ctrldir . $this -> eof_ctrl_dir .
+ pack('v', sizeof($this -> ctrl_dir)).pack('v', sizeof($this -> ctrl_dir)).
+ pack('V', strlen($ctrldir)) . pack('V', strlen($data)) . "\x00\x00";
+ }
+
+ function add_dir($name)
+ {
+ $name = str_replace("\\", "/", $name);
+ $fr = "\x50\x4b\x03\x04\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00";
+
+ $fr .= pack("V",0).pack("V",0).pack("V",0).pack("v", strlen($name) );
+ $fr .= pack("v", 0 ).$name.pack("V", 0).pack("V", 0).pack("V", 0);
+ $this -> datasec[] = $fr;
+
+ $new_offset = strlen(implode("", $this->datasec));
+
+ $cdrec = "\x50\x4b\x01\x02\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00";
+ $cdrec .= pack("V",0).pack("V",0).pack("V",0).pack("v", strlen($name) );
+ $cdrec .= pack("v", 0 ).pack("v", 0 ).pack("v", 0 ).pack("v", 0 );
+ $ext = "\xff\xff\xff\xff";
+ $cdrec .= pack("V", 16 ).pack("V", $this -> old_offset ).$name;
+
+ $this -> ctrl_dir[] = $cdrec;
+ $this -> old_offset = $new_offset;
+ $this -> dirs[] = $name;
+ }
+
+ /**
+ * Add a file named $name from a string $data
+ */
+ function add_File($data, $name, $compact = 1)
+ {
+ $name = str_replace('\\', '/', $name);
+ $dtime = dechex($this->DosTime());
+
+ $hexdtime = '\x' . $dtime[6] . $dtime[7].'\x'.$dtime[4] . $dtime[5]
+ . '\x' . $dtime[2] . $dtime[3].'\x'.$dtime[0].$dtime[1];
+ eval('$hexdtime = "' . $hexdtime . '";');
+
+ if($compact)
+ $fr = "\x50\x4b\x03\x04\x14\x00\x00\x00\x08\x00".$hexdtime;
+ else $fr = "\x50\x4b\x03\x04\x0a\x00\x00\x00\x00\x00".$hexdtime;
+ $unc_len = strlen($data); $crc = crc32($data);
+
+ if($compact){
+ $zdata = gzcompress($data); $c_len = strlen($zdata);
+ $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2);
+ }else{
+ $zdata = $data;
+ }
+ $c_len=strlen($zdata);
+ $fr .= pack('V', $crc).pack('V', $c_len).pack('V', $unc_len);
+ $fr .= pack('v', strlen($name)).pack('v', 0).$name.$zdata;
+
+ $fr .= pack('V', $crc).pack('V', $c_len).pack('V', $unc_len);
+
+ $this -> datasec[] = $fr;
+ $new_offset = strlen(implode('', $this->datasec));
+ if($compact)
+ $cdrec = "\x50\x4b\x01\x02\x00\x00\x14\x00\x00\x00\x08\x00";
+ else $cdrec = "\x50\x4b\x01\x02\x14\x00\x0a\x00\x00\x00\x00\x00";
+ $cdrec .= $hexdtime.pack('V', $crc).pack('V', $c_len).pack('V', $unc_len);
+ $cdrec .= pack('v', strlen($name) ).pack('v', 0 ).pack('v', 0 );
+ $cdrec .= pack('v', 0 ).pack('v', 0 ).pack('V', 32 );
+ $cdrec .= pack('V', $this -> old_offset );
+
+ $this -> old_offset = $new_offset;
+ $cdrec .= $name;
+ $this -> ctrl_dir[] = $cdrec;
+ return true;
+ }
+
+ function DosTime() {
+ $timearray = getdate();
+ if ($timearray['year'] < 1980) {
+ $timearray['year'] = 1980; $timearray['mon'] = 1;
+ $timearray['mday'] = 1; $timearray['hours'] = 0;
+ $timearray['minutes'] = 0; $timearray['seconds'] = 0;
+ }
+ return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) | ($timearray['hours'] << 11) |
+ ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1);
+ }
+
+ /**
+ * Extract a zip file $zn to the $to directory
+ */
+ function Extract ( $zn, $to, $index = Array(-1) )
+ {
+ if(!@is_dir($to)) @mkdir($to,0777);
+ $ok = 0; $zip = @fopen($zn,'rb');
+ if(!$zip) return(-1);
+ $cdir = $this->ReadCentralDir($zip,$zn);
+ $pos_entry = $cdir['offset'];
+
+ if(!is_array($index)){ $index = array($index); }
+ for($i=0; isset($index[$i]);$i++){
+ if(intval($index[$i])!=$index[$i]||$index[$i]>$cdir['entries'])
+ return(-1);
+ }
+
+ for ($i=0; $i<$cdir['entries']; $i++)
+ {
+ @fseek($zip, $pos_entry);
+ $header = $this->ReadCentralFileHeaders($zip);
+ $header['index'] = $i; $pos_entry = ftell($zip);
+ @rewind($zip); fseek($zip, $header['offset']);
+ if(in_array("-1",$index)||in_array($i,$index))
+ $stat[$header['filename']]=$this->ExtractFile($header, $to, $zip);
+
+ }
+ fclose($zip);
+ return $stat;
+ }
+
+ function ReadFileHeader($zip, $header)
+ {
+ $binary_data = fread($zip, 30);
+ $data = unpack('vchk/vid/vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $binary_data);
+
+ $header['filename'] = fread($zip, $data['filename_len']);
+ if ($data['extra_len'] != 0) {
+ $header['extra'] = fread($zip, $data['extra_len']);
+ } else { $header['extra'] = ''; }
+
+ $header['compression'] = $data['compression'];
+ $header['flag'] = $data['flag'];
+ $header['mdate'] = $data['mdate'];$header['mtime'] = $data['mtime'];
+ if (($header['flag'] & 8) != 8) { // Purpose bit flag bit 3 not set, overwrite the central header values
+ foreach (array('size','compressed_size','crc') as $hd) {
+ $header[$hd] = $data[$hd];
+ }
+ }
+
+ if ($header['mdate'] && $header['mtime']){
+ $hour=($header['mtime']&0xF800)>>11;$minute=($header['mtime']&0x07E0)>>5;
+ $seconde=($header['mtime']&0x001F)*2;$year=(($header['mdate']&0xFE00)>>9)+1980;
+ $month=($header['mdate']&0x01E0)>>5;$day=$header['mdate']&0x001F;
+ $header['mtime'] = mktime($hour, $minute, $seconde, $month, $day, $year);
+ }else{$header['mtime'] = time();}
+
+ $header['stored_filename'] = $header['filename'];
+ $header['status'] = "ok";
+ return $header;
+ }
+
+ function ReadCentralFileHeaders($zip){
+ $binary_data = fread($zip, 46);
+ $header = unpack('vchkid/vid/vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/Vexternal/Voffset', $binary_data);
+
+ if ($header['filename_len'] != 0)
+ $header['filename'] = fread($zip,$header['filename_len']);
+ else $header['filename'] = '';
+
+ if ($header['extra_len'] != 0)
+ $header['extra'] = fread($zip, $header['extra_len']);
+ else $header['extra'] = '';
+
+ if ($header['comment_len'] != 0)
+ $header['comment'] = fread($zip, $header['comment_len']);
+ else $header['comment'] = '';
+
+ if ($header['mdate'] && $header['mtime'])
+ {
+ $hour = ($header['mtime'] & 0xF800) >> 11;
+ $minute = ($header['mtime'] & 0x07E0) >> 5;
+ $seconde = ($header['mtime'] & 0x001F)*2;
+ $year = (($header['mdate'] & 0xFE00) >> 9) + 1980;
+ $month = ($header['mdate'] & 0x01E0) >> 5;
+ $day = $header['mdate'] & 0x001F;
+ $header['mtime'] = mktime($hour, $minute, $seconde, $month, $day, $year);
+ } else {
+ $header['mtime'] = time();
+ }
+ $header['stored_filename'] = $header['filename'];
+ $header['status'] = 'ok';
+ if (substr($header['filename'], -1) == '/')
+ $header['external'] = 0x41FF0010;
+ return $header;
+ }
+
+ function ReadCentralDir($zip,$zip_name)
+ {
+ $size = filesize($zip_name);
+ if ($size < 277) $maximum_size = $size;
+ else $maximum_size=277;
+
+ @fseek($zip, $size-$maximum_size);
+ $pos = ftell($zip); $bytes = 0x00000000;
+
+ while ($pos < $size)
+ {
+ $byte = @fread($zip, 1);
+ $bytes=(($bytes << 8) & 0xFFFFFFFF) | Ord($byte);
+ if ($bytes == 0x504b0506){ $pos++; break; } $pos++;
+ }
+
+ $data=unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size',
+ fread($zip, 18));
+
+ if ($data['comment_size'] != 0)
+ $centd['comment'] = fread($zip, $data['comment_size']);
+ else $centd['comment'] = ''; $centd['entries'] = $data['entries'];
+ $centd['disk_entries'] = $data['disk_entries'];
+ $centd['offset'] = $data['offset'];$centd['disk_start'] = $data['disk_start'];
+ $centd['size'] = $data['size']; $centd['disk'] = $data['disk'];
+ return $centd;
+ }
+
+ function ExtractFile($header,$to,$zip)
+ {
+ $header = $this->readfileheader($zip, $header);
+
+ if(substr($to,-1)!="/") $to.="/";
+ if(substr($header['filename'],-1)=="/")
+ {
+// @mkdir($to.$header['filename']); --CS
+ $this->_mkdir($to.$header['filename']); //-- CS
+ return +2;
+ }
+
+// $pth = explode("/",dirname($header['filename']));
+// for($i=0,$tmp="";isset($pth[$i]);$i++){
+// if(!$pth[$i]) continue;
+// if(!is_dir($to.$tmp.$pth[$i])) @mkdir($to.$pth[$i],0777);
+// $tmp.=$pth[$i]."/";
+// }
+ if (!$this->_mkdir($to.dirname($header['filename']))) return (-1); //--CS
+
+ if (!array_key_exists("external", $header) || (!($header['external']==0x41FF0010)&&!($header['external']==16)))
+ {
+ if ($header['compression']==0)
+ {
+ $fp = @fopen($to.$header['filename'], 'wb');
+ if(!$fp) return(-1);
+ $size = $header['compressed_size'];
+
+ while ($size != 0)
+ {
+ $read_size = ($size < 2048 ? $size : 2048);
+ $buffer = fread($zip, $read_size);
+ $binary_data = pack('a'.$read_size, $buffer);
+ @fwrite($fp, $binary_data, $read_size);
+ $size -= $read_size;
+ }
+ fclose($fp);
+ touch($to.$header['filename'], $header['mtime']);
+
+ }else{
+ if (!is_dir(dirname($to.$header['filename']))) $this->_mkdir(dirname($to.$header['filename'])); //-CS
+ $fp = fopen($to.$header['filename'].'.gz','wb');
+ if(!$fp) return(-1);
+ $binary_data = pack('va1a1Va1a1', 0x8b1f, Chr($header['compression']),
+ Chr(0x00), time(), Chr(0x00), Chr(3));
+
+ fwrite($fp, $binary_data, 10);
+ $size = $header['compressed_size'];
+
+ while ($size != 0)
+ {
+ $read_size = ($size < 1024 ? $size : 1024);
+ $buffer = fread($zip, $read_size);
+ $binary_data = pack('a'.$read_size, $buffer);
+ @fwrite($fp, $binary_data, $read_size);
+ $size -= $read_size;
+ }
+
+ $binary_data = pack('VV', $header['crc'], $header['size']);
+ fwrite($fp, $binary_data,8); fclose($fp);
+
+ $gzp = @gzopen($to.$header['filename'].'.gz','rb');
+ if(!$gzp){
+ @gzclose($gzp); @unlink($to.$header['filename']);
+ die("Archive is compressed whereas ZLIB is not enabled.");
+ }
+ $fp = @fopen($to.$header['filename'],'wb');
+ if(!$fp) return(-1);
+ $size = $header['size'];
+
+ while ($size != 0)
+ {
+ $read_size = ($size < 2048 ? $size : 2048);
+ $buffer = gzread($gzp, $read_size);
+ $binary_data = pack('a'.$read_size, $buffer);
+ @fwrite($fp, $binary_data, $read_size);
+ $size -= $read_size;
+ }
+ fclose($fp); gzclose($gzp);
+
+ touch($to.$header['filename'], $header['mtime']);
+ @unlink($to.$header['filename'].'.gz');
+
+ }}
+ return true;
+ }
+
+ //--CS start
+ // centralize mkdir calls and use dokuwiki io functions
+ function _mkdir($d) {
+ return io_mkdir_p($d); // --AB
+ //return ap_mkdir($d);
+ }
+ //--CS end
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/action.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/action.php
new file mode 100644
index 000000000..0ca861518
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/action.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * ODT Plugin: Exports to ODT
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Aurelien Bompard <aurelien@bompard.org>
+ */
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'action.php');
+
+/**
+ * Add the template as a page dependency for the caching system
+ */
+class action_plugin_odt extends DokuWiki_Action_Plugin {
+
+ function register($controller) {
+ $controller->register_hook('PARSER_CACHE_USE','BEFORE', $this, 'handle_cache_prepare');
+ }
+
+ function handle_cache_prepare(&$event, $param) {
+ global $conf, $ID;
+ $cache =& $event->data;
+ // only the ODT rendering mode needs caching tweaks
+ if ($cache->mode != "odt") return;
+ $odt_meta = p_get_metadata($ID, 'relation odt');
+ $template_name = $odt_meta["template"];
+ if (!$template_name) {
+ return;
+ }
+ $template_path = $conf['mediadir'].'/'.$this->getConf("tpl_dir")."/".$template_name;
+ if (file_exists($template_path)) {
+ $cache->depends['files'][] = $template_path;
+ }
+ }
+
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/conf/default.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/conf/default.php
new file mode 100644
index 000000000..d69966874
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/conf/default.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * @author Aurelien Bompard <aurelien@bompard.org>
+ */
+
+// Directory of the templates in the media manager
+$conf['tpl_dir'] = 'odt';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/conf/metadata.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/conf/metadata.php
new file mode 100644
index 000000000..7614f3c73
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/conf/metadata.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * Options for the odt plugin
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+$meta['tpl_dir'] = array('string');
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/info.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/info.txt
new file mode 100644
index 000000000..3006078be
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/info.txt
@@ -0,0 +1,8 @@
+# General Plugin Info do not edit
+
+author Andreas Gohr, Aurelien Bompard
+email andi@splitbrain.org, aurelien@bompard.org
+date 2010-07-24
+name Open Document Plugin
+desc Export the current Wiki page to a OpenOffice ODT file
+url http://www.dokuwiki.org/plugin:odt
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/de/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/de/lang.php
new file mode 100644
index 000000000..607ff99e3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/de/lang.php
@@ -0,0 +1,9 @@
+<?php
+
+// settings must be present and set appropriately for the language
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+
+// export button
+$lang['view'] = 'Ins Open-Document-Format exportieren';
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/en/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/en/lang.php
new file mode 100644
index 000000000..4a6d50985
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/en/lang.php
@@ -0,0 +1,12 @@
+<?php
+
+// settings must be present and set appropriately for the language
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+
+// export button
+$lang['view'] = 'Export page to Open Document format';
+
+// template not found in the directory
+$lang['tpl_not_found'] = 'WARNING : the ODT template "%s" was not found in the templates directory "%s". Using the default template.';
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/es/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/es/lang.php
new file mode 100644
index 000000000..f86a80426
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/es/lang.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Spanish language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Rodolfo Pilas <rodolfo@pilas.net>
+ */
+
+
+// settings must be present and set appropriately for the language
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+
+// export button
+$lang['view'] = 'Exportar p&aacute;gina en formato Open Document';
+
+// template not found in the directory
+$lang['tpl_not_found'] = 'ATENCION : la plantilla ODT "%s" no ha sido encontrada en el directorio de plantillas "%s". Se usa la plantilla por defecto.';
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/fr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/fr/lang.php
new file mode 100644
index 000000000..4290573ec
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/fr/lang.php
@@ -0,0 +1,12 @@
+<?php
+
+// settings must be present and set appropriately for the language
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+
+// export button
+$lang['view'] = 'Exporter la page au format Open Document';
+
+// template not found in the directory
+$lang['tpl_not_found'] = 'ATTENTION: le modèle ODT "%s" n\'a pas été trouvé dans le répertoire de modèles "%s". L\'export est réalisé avec le modèle par défaut.';
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/it/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/it/lang.php
new file mode 100644
index 000000000..45e171be5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/it/lang.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * Options for odt plugin
+ * @author Diego Pierotto <ita.translations@tiscali.it>
+ */
+
+$lang['view'] = 'Esporta pagina in formato Open Document';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/ja/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/ja/lang.php
new file mode 100644
index 000000000..6df1be2d0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/ja/lang.php
@@ -0,0 +1,12 @@
+<?php
+
+// settings must be present and set appropriately for the language
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+
+// export button
+$lang['view'] = 'ã“ã®ãƒšãƒ¼ã‚¸ã‚’Open Documentフォーマットã§ä¿å­˜';
+
+// template not found in the directory
+$lang['tpl_not_found'] = '注æ„:ODTテンプレート "%s" ã¯ãƒ†ãƒ³ãƒ—レートディレクトリ "%s"ã®ä¸­ã«ã‚ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚デフォルトã®ãƒ†ãƒ³ãƒ—レートを使用ã—ã¾ã™ã€‚';
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/ru/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/ru/lang.php
new file mode 100644
index 000000000..9eaaf2c43
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/ru/lang.php
@@ -0,0 +1,12 @@
+<?php
+
+// settings must be present and set appropriately for the language
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+
+// export button
+$lang['view'] = 'ЭкÑпорт Ñтраницы в формат Open Document';
+
+// template not found in the directory
+$lang['tpl_not_found'] = 'Ð’ÐИМÐÐИЕ: ODT шаблон "%s" не найден в каталоге Ð´Ð»Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð¾Ð² "%s". ИÑпользуетÑÑ ÑˆÐ°Ð±Ð»Ð¾Ð½ по умолчанию.';
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/zh/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/zh/lang.php
new file mode 100644
index 000000000..808b248e0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/zh/lang.php
@@ -0,0 +1,12 @@
+<?php
+
+// settings must be present and set appropriately for the language
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+
+// export button
+$lang['view'] = '将页é¢å¯¼å‡ºä¸ºå¼€æ”¾æ–‡æ¡£æ ¼å¼';
+
+// template not found in the directory
+$lang['tpl_not_found'] = '警告:模æ¿ç›®å½•ä¸­æ²¡æœ‰æ‰¾åˆ°ODTæ¨¡æ¿ â€œ%sâ€ã€‚;
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/odt.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/odt.png
new file mode 100644
index 000000000..4ea3cec8f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/odt.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/renderer.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/renderer.php
new file mode 100644
index 000000000..5525e4926
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/renderer.php
@@ -0,0 +1,1232 @@
+<?php
+/**
+ * ODT Plugin: Exports to ODT
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Aurelien Bompard <aurelien@bompard.org>
+ */
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+require_once DOKU_INC.'inc/parser/renderer.php';
+
+// ZipLib.class.php
+$dw_version = preg_replace('/[^\d]/', '', getversion());
+if (version_compare($dw_version, "20070626") and
+ version_compare(PHP_VERSION,'5.0.0','>')) {
+ // If strictly newer than 2007-06-26 and use PHP5, fixes to ZipLib are
+ // included in Dokuwiki's ZipLib
+ require_once DOKU_INC.'inc/ZipLib.class.php';
+} else { // for DW up to 2007-06-26, we need the patched version
+ require_once 'ZipLib.class.php';
+}
+
+/**
+ * The Renderer
+ */
+class renderer_plugin_odt extends Doku_Renderer {
+ var $ZIP = null;
+ var $meta;
+ var $store = '';
+ var $footnotes = array();
+ var $manifest = array();
+ var $headers = array();
+ var $template = "";
+ var $fields = array();
+ var $in_list_item = false;
+ var $in_paragraph = false;
+ // Automatic styles. Will always be added to content.xml and styles.xml
+ var $autostyles = array(
+ "pm1"=>'
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="21cm" fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
+ <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.1cm" style:distance-after-sep="0.1cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style/>
+ </style:page-layout>',
+ "sub"=>'
+ <style:style style:name="sub" style:family="text">
+ <style:text-properties style:text-position="-33% 80%"/>
+ </style:style>',
+ "sup"=>'
+ <style:style style:name="sup" style:family="text">
+ <style:text-properties style:text-position="33% 80%"/>
+ </style:style>',
+ "del"=>'
+ <style:style style:name="del" style:family="text">
+ <style:text-properties style:text-line-through-style="solid"/>
+ </style:style>',
+ "underline"=>'
+ <style:style style:name="underline" style:family="text">
+ <style:text-properties style:text-underline-style="solid"
+ style:text-underline-width="auto" style:text-underline-color="font-color"/>
+ </style:style>',
+ "media"=>'
+ <style:style style:name="media" style:family="graphic" style:parent-style-name="Graphics">
+ <style:graphic-properties style:run-through="foreground" style:wrap="parallel" style:number-wrapped-paragraphs="no-limit"
+ style:wrap-contour="false" style:vertical-pos="top" style:vertical-rel="baseline" style:horizontal-pos="left"
+ style:horizontal-rel="paragraph"/>
+ </style:style>',
+ "medialeft"=>'
+ <style:style style:name="medialeft" style:family="graphic" style:parent-style-name="Graphics">
+ <style:graphic-properties style:run-through="foreground" style:wrap="parallel" style:number-wrapped-paragraphs="no-limit"
+ style:wrap-contour="false" style:horizontal-pos="left" style:horizontal-rel="paragraph"/>
+ </style:style>',
+ "mediaright"=>'
+ <style:style style:name="mediaright" style:family="graphic" style:parent-style-name="Graphics">
+ <style:graphic-properties style:run-through="foreground" style:wrap="parallel" style:number-wrapped-paragraphs="no-limit"
+ style:wrap-contour="false" style:horizontal-pos="right" style:horizontal-rel="paragraph"/>
+ </style:style>',
+ "mediacenter"=>'
+ <style:style style:name="mediacenter" style:family="graphic" style:parent-style-name="Graphics">
+ <style:graphic-properties style:run-through="foreground" style:wrap="none" style:horizontal-pos="center"
+ style:horizontal-rel="paragraph"/>
+ </style:style>',
+ "tablealigncenter"=>'
+ <style:style style:name="tablealigncenter" style:family="paragraph" style:parent-style-name="Table_20_Contents">
+ <style:paragraph-properties fo:text-align="center"/>
+ </style:style>',
+ "tablealignright"=>'
+ <style:style style:name="tablealignright" style:family="paragraph" style:parent-style-name="Table_20_Contents">
+ <style:paragraph-properties fo:text-align="end"/>
+ </style:style>',
+ "tablealignleft"=>'
+ <style:style style:name="tablealignleft" style:family="paragraph" style:parent-style-name="Table_20_Contents">
+ <style:paragraph-properties fo:text-align="left"/>
+ </style:style>',
+ "tableheader"=>'
+ <style:style style:name="tableheader" style:family="table-cell">
+ <style:table-cell-properties fo:padding="0.05cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
+ </style:style>',
+ "tablecell"=>'
+ <style:style style:name="tablecell" style:family="table-cell">
+ <style:table-cell-properties fo:padding="0.05cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
+ </style:style>',
+ "legendcenter"=>'
+ <style:style style:name="legendcenter" style:family="paragraph" style:parent-style-name="Illustration">
+ <style:paragraph-properties fo:text-align="center"/>
+ </style:style>',
+ );
+ // Regular styles. May not be present if in template mode, in which case they will be added to styles.xml
+ var $styles = array(
+ "Source_20_Text"=>'
+ <style:style style:name="Source_20_Text" style:display-name="Source Text" style:family="text">
+ <style:text-properties style:font-name="Bitstream Vera Sans Mono" style:font-name-asian="Bitstream Vera Sans Mono" style:font-name-complex="Bitstream Vera Sans Mono"/>
+ </style:style>',
+ "Preformatted_20_Text"=>'
+ <style:style style:name="Preformatted_20_Text" style:display-name="Preformatted Text" style:family="paragraph" style:parent-style-name="Standard" style:class="html">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm"/>
+ <style:text-properties style:font-name="Bitstream Vera Sans Mono" style:font-name-asian="Bitstream Vera Sans Mono" style:font-name-complex="Bitstream Vera Sans Mono"/>
+ </style:style>',
+ "Horizontal_20_Line"=>'
+ <style:style style:name="Horizontal_20_Line" style:display-name="Horizontal Line" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text_20_body" style:class="html">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.5cm" style:border-line-width-bottom="0.002cm 0.035cm 0.002cm" fo:padding="0cm" fo:border-left="none" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.04cm double #808080" text:number-lines="false" text:line-number="0" style:join-border="false"/>
+ <style:text-properties fo:font-size="6pt" style:font-size-asian="6pt" style:font-size-complex="6pt"/>
+ </style:style>',
+ "Footnote"=>'
+ <style:style style:name="Footnote" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
+ <style:paragraph-properties fo:margin-left="0.5cm" fo:margin-right="0cm" fo:text-indent="-0.5cm" style:auto-text-indent="false" text:number-lines="false" text:line-number="0"/>
+ <style:text-properties fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
+ </style:style>',
+ "Emphasis"=>'
+ <style:style style:name="Emphasis" style:family="text">
+ <style:text-properties fo:font-style="italic" style:font-style-asian="italic" style:font-style-complex="italic"/>
+ </style:style>',
+ "Strong_20_Emphasis"=>'
+ <style:style style:name="Strong_20_Emphasis" style:display-name="Strong Emphasis" style:family="text">
+ <style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
+ </style:style>',
+ );
+ // Font definitions. May not be present if in template mode, in which case they will be added to styles.xml
+ var $fonts = array(
+ "StarSymbol"=>'<style:font-face style:name="StarSymbol" svg:font-family="StarSymbol"/>', // for bullets
+ "Bitstream Vera Sans Mono"=>'<style:font-face style:name="Bitstream Vera Sans Mono" svg:font-family="\'Bitstream Vera Sans Mono\'" style:font-family-generic="modern" style:font-pitch="fixed"/>', // for source code
+ );
+
+ /**
+ * Return version info
+ */
+ function getInfo(){
+ return confToHash(dirname(__FILE__).'/info.txt');
+ }
+
+ /**
+ * Returns the format produced by this renderer.
+ */
+ function getFormat(){
+ return "odt";
+ }
+
+ /**
+ * Do not make multiple instances of this class
+ */
+ function isSingleton(){
+ return true;
+ }
+
+
+ /**
+ * Initialize the rendering
+ */
+ function document_start() {
+ global $ID;
+
+ // If older or equal to 2007-06-26, we need to disable caching
+ $dw_version = preg_replace('/[^\d]/', '', getversion());
+ if (version_compare($dw_version, "20070626", "<=")) {
+ $this->info["cache"] = false;
+ }
+
+ // prepare the zipper
+ $this->ZIP = new ZipLib();
+
+ // prepare meta data
+ $this->meta = array(
+ 'meta:generator' => 'DokuWiki '.getversion(),
+ 'meta:initial-creator' => 'Generated',
+ 'meta:creation-date' => date('Y-m-d\\TH::i:s', null), //FIXME
+ 'dc:creator' => 'Generated',
+ 'dc:date' => date('Y-m-d\\TH::i:s', null),
+ 'dc:language' => 'en-US',
+ 'meta:editing-cycles' => '1',
+ 'meta:editing-duration' => 'PT0S',
+ );
+
+ // send the content type header, new method after 2007-06-26 (handles caching)
+ $output_filename = str_replace(':','-',$ID).".odt";
+ if (version_compare($dw_version, "20070626")) {
+ // store the content type headers in metadata
+ $headers = array(
+ 'Content-Type' => 'application/vnd.oasis.opendocument.text',
+ 'Content-Disposition' => 'attachment; filename="'.$output_filename.'";',
+ );
+ p_set_metadata($ID,array('format' => array('odt' => $headers) ));
+ } else { // older method
+ header('Content-Type: application/vnd.oasis.opendocument.text');
+ header('Content-Disposition: attachment; filename="'.$output_filename.'";');
+ }
+ }
+
+ /**
+ * Prepare meta.xml
+ */
+ function _odtMeta(){
+ $value = '<' . '?xml version="1.0" encoding="UTF-8"?' . ">\n";
+ $value .= '<office:document-meta ';
+ $value .= 'xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" ';
+ $value .= 'xmlns:xlink="http://www.w3.org/1999/xlink" ';
+ $value .= 'xmlns:dc="http://purl.org/dc/elements/1.1/" ';
+ $value .= 'xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" ';
+ $value .= 'office:version="1.0">';
+ $value .= '<office:meta>';
+ # FIXME
+ # foreach($meta as $meta_key => $meta_value)
+ # $value .= '<' . $meta_key . '>' . ODUtils::encode($meta_value) . '</' . $meta_key . '>';
+ $value .= '</office:meta>';
+ $value .= '</office:document-meta>';
+ $this->ZIP->add_File($value,'meta.xml');
+ }
+
+ /**
+ * Prepare manifest.xml
+ */
+ function _odtManifest(){
+ $value = '<' . '?xml version="1.0" encoding="UTF-8"?' . ">\n";
+ $value .= '<manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0">';
+ $value .= '<manifest:file-entry manifest:media-type="application/vnd.oasis.opendocument.text" manifest:full-path="/"/>';
+ $value .= '<manifest:file-entry manifest:media-type="text/xml" manifest:full-path="settings.xml"/>';
+ $value .= '<manifest:file-entry manifest:media-type="text/xml" manifest:full-path="meta.xml"/>';
+ $value .= '<manifest:file-entry manifest:media-type="text/xml" manifest:full-path="content.xml"/>';
+ $value .= '<manifest:file-entry manifest:media-type="text/xml" manifest:full-path="styles.xml"/>';
+
+ foreach($this->manifest as $path => $type){
+ $value .= '<manifest:file-entry manifest:media-type="'.$this->_xmlEntities($type).
+ '" manifest:full-path="'.$this->_xmlEntities($path).'"/>';
+ }
+
+ $value .= '</manifest:manifest>';
+ $this->ZIP->add_File($value,'META-INF/manifest.xml');
+ }
+
+ /**
+ * Prepare settings.xml
+ */
+ function _odtSettings(){
+ $value = '<' . '?xml version="1.0" encoding="UTF-8"?' . ">\n";
+ $value .= '<office:document-settings xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" office:version="1.0"><office:settings><config:config-item-set config:name="dummy-settings"><config:config-item config:name="MakeValidatorHappy" config:type="boolean">true</config:config-item></config:config-item-set></office:settings></office:document-settings>';
+ $this->ZIP->add_File($value,'settings.xml');
+ }
+
+
+
+
+ /**
+ * Closes the document
+ */
+ function document_end(){
+ global $conf;
+ if ($this->template) { // template chosen
+ if (file_exists($conf['mediadir'].'/'.$this->getConf("tpl_dir")."/".$this->template)) { //template found
+ $this->document_end_template();
+ } else { // template chosen but not found : warn the user and use the default template
+ $this->doc = '<text:p text:style-name="Text_20_body"><text:span text:style-name="Strong_20_Emphasis">'
+ .$this->_xmlEntities( sprintf($this->getLang('tpl_not_found'),$this->template,$this->getConf("tpl_dir")) )
+ .'</text:span></text:p>'.$this->doc;
+ $this->document_end_scratch();
+ }
+ } else {
+ $this->document_end_scratch();
+ }
+ $this->doc = $this->ZIP->get_file();
+ }
+
+
+ /**
+ * Closes the document when not using a template
+ */
+ function document_end_scratch(){
+ $autostyles = $this->_odtAutoStyles();
+ $userfields = $this->_odtUserFields();
+
+ // add defaults
+ $this->ZIP->add_File('application/vnd.oasis.opendocument.text', 'mimetype', 0);
+
+ $this->_odtMeta();
+ $this->_odtSettings();
+
+ $value = '<' . '?xml version="1.0" encoding="UTF-8"?' . ">\n";
+ $value .= '<office:document-content ';
+ $value .= 'xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" ';
+ $value .= 'xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" ';
+ $value .= 'xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" ';
+ $value .= 'xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" ';
+ $value .= 'xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" ';
+ $value .= 'xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" ';
+ $value .= 'xmlns:xlink="http://www.w3.org/1999/xlink" ';
+ $value .= 'xmlns:dc="http://purl.org/dc/elements/1.1/" ';
+ $value .= 'xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" ';
+ $value .= 'xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" ';
+ $value .= 'xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" ';
+ $value .= 'xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" ';
+ $value .= 'xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" ';
+ $value .= 'xmlns:math="http://www.w3.org/1998/Math/MathML" ';
+ $value .= 'xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" ';
+ $value .= 'xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" ';
+ $value .= 'xmlns:dom="http://www.w3.org/2001/xml-events" ';
+ $value .= 'xmlns:xforms="http://www.w3.org/2002/xforms" ';
+ $value .= 'xmlns:xsd="http://www.w3.org/2001/XMLSchema" ';
+ $value .= 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ';
+ $value .= 'office:version="1.0">';
+ $value .= '<office:scripts/>';
+ $value .= '<office:font-face-decls>';
+ $value .= '<style:font-face style:name="Tahoma1" svg:font-family="Tahoma"/>';
+ $value .= '<style:font-face style:name="Lucida Sans Unicode" svg:font-family="&apos;Lucida Sans Unicode&apos;" style:font-pitch="variable"/>';
+ $value .= '<style:font-face style:name="Tahoma" svg:font-family="Tahoma" style:font-pitch="variable"/>';
+ $value .= '<style:font-face style:name="Times New Roman" svg:font-family="&apos;Times New Roman&apos;" style:font-family-generic="roman" style:font-pitch="variable"/>';
+ $value .= '</office:font-face-decls>';
+ $value .= $autostyles;
+ $value .= '<office:body>';
+ $value .= '<office:text>';
+ $value .= '<office:forms form:automatic-focus="false" form:apply-design-mode="false"/>';
+ $value .= '<text:sequence-decls>';
+ $value .= '<text:sequence-decl text:display-outline-level="0" text:name="Illustration"/>';
+ $value .= '<text:sequence-decl text:display-outline-level="0" text:name="Table"/>';
+ $value .= '<text:sequence-decl text:display-outline-level="0" text:name="Text"/>';
+ $value .= '<text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>';
+ $value .= '</text:sequence-decls>';
+ $value .= $userfields;
+ $value .= $this->doc;
+ $value .= '</office:text>';
+ $value .= '</office:body>';
+ $value .= '</office:document-content>';
+
+ $this->ZIP->add_File($value,'content.xml');
+
+ $value = io_readFile(DOKU_PLUGIN.'odt/styles.xml');
+ $value = str_replace('<office:automatic-styles/>', $autostyles, $value);
+ $this->ZIP->add_File($value,'styles.xml');
+
+ // build final manifest
+ $this->_odtManifest();
+ }
+
+ /**
+ * Closes the document using a template
+ */
+ function document_end_template(){
+ global $conf, $ID; // for the temp dir
+
+ // Temp dir
+ if (is_dir($conf['tmpdir'])) {
+ $temp_dir = $conf['tmpdir']; // version > 20070626
+ } else {
+ $temp_dir = $conf['savedir'].'/cache/tmp'; // version <= 20070626
+ }
+ $this->temp_dir = $temp_dir."/odt/".str_replace(':','-',$ID);
+ if (is_dir($this->temp_dir)) { $this->io_rm_rf($this->temp_dir); }
+ io_mkdir_p($this->temp_dir);
+
+ // Extract template
+ $template_path = $conf['mediadir'].'/'.$this->getConf("tpl_dir")."/".$this->template;
+ $this->ZIP->Extract($template_path, $this->temp_dir);
+
+ // Prepare content
+ $autostyles = $this->_odtAutoStyles();
+ $missingstyles = $this->_odtStyles();
+ $missingfonts = $this->_odtFonts();
+ $userfields = $this->_odtUserFields();
+
+ // Insert content
+ $old_content = io_readFile($this->temp_dir.'/content.xml');
+ if (strpos($old_content, 'DOKUWIKI-ODT-INSERT') !== FALSE) { // Replace the mark
+ $this->_odtReplaceInFile('/<text:p[^>]*>DOKUWIKI-ODT-INSERT<\/text:p>/',
+ $this->doc, $this->temp_dir.'/content.xml', true);
+ } else { // Append to the template
+ $this->_odtReplaceInFile('</office:text>', $this->doc.'</office:text>', $this->temp_dir.'/content.xml');
+ }
+
+ // Cut off unwanted content
+ if (strpos($old_content, 'DOKUWIKI-ODT-CUT-START') !== FALSE
+ && strpos($old_content, 'DOKUWIKI-ODT-CUT-STOP') !== FALSE) {
+ $this->_odtReplaceInFile('/DOKUWIKI-ODT-CUT-START.*DOKUWIKI-ODT-CUT-STOP/',
+ '', $this->temp_dir.'/content.xml', true);
+ }
+
+ // Insert userfields
+ if (strpos($old_content, "text:user-field-decls") === FALSE) { // no existing userfields
+ $this->_odtReplaceInFile('/<office:text([^>]*)>/U', '<office:text\1>'.$userfields, $this->temp_dir.'/content.xml', TRUE);
+ } else {
+ $this->_odtReplaceInFile('</text:user-field-decls>', substr($userfields,23), $this->temp_dir.'/content.xml');
+ }
+
+ // Insert styles & fonts
+ $this->_odtReplaceInFile('</office:automatic-styles>', substr($autostyles, 25), $this->temp_dir.'/content.xml');
+ $this->_odtReplaceInFile('</office:automatic-styles>', substr($autostyles, 25), $this->temp_dir.'/styles.xml');
+ $this->_odtReplaceInFile('</office:styles>', $missingstyles.'</office:styles>', $this->temp_dir.'/styles.xml');
+ $this->_odtReplaceInFile('</office:font-face-decls>', $missingfonts.'</office:font-face-decls>', $this->temp_dir.'/styles.xml');
+
+ // Build the Zip
+ $this->ZIP->Compress(null, $this->temp_dir, null);
+ $this->io_rm_rf($this->temp_dir);
+ }
+
+ function _odtReplaceInFile($from, $to, $file, $regexp=FALSE) {
+ $value = io_readFile($file);
+ if ($regexp) {
+ $value = preg_replace($from, $to, $value);
+ } else {
+ $value = str_replace($from, $to, $value);
+ }
+ $file_f = fopen($file, 'w');
+ fwrite($file_f, $value);
+ fclose($file_f);
+ }
+
+ /**
+ * Recursively deletes a directory (equivalent to the "rm -rf" command)
+ * Found in comments on http://www.php.net/rmdir
+ */
+ function io_rm_rf($f) {
+ if (is_dir($f)) {
+ foreach(glob($f.'/*') as $sf) {
+ if (is_dir($sf) && !is_link($sf)) {
+ $this->io_rm_rf($sf);
+ } else {
+ unlink($sf);
+ }
+ }
+ } else { // avoid nasty consequenses if something wrong is given
+ die("Error: not a directory - $f");
+ }
+ rmdir($f);
+ }
+
+ // not supported - use OpenOffice builtin tools instead!
+ function render_TOC() { return ''; }
+
+ function toc_additem($id, $text, $level) {}
+
+ function _odtAutoStyles() {
+ $value = '<office:automatic-styles>';
+ foreach ($this->autostyles as $stylename=>$stylexml) {
+ $value .= $stylexml;
+ }
+ $value .= '</office:automatic-styles>';
+ return $value;
+ }
+
+ function _odtUserFields() {
+ $value = '<text:user-field-decls>';
+ foreach ($this->fields as $fname=>$fvalue) {
+ $value .= '<text:user-field-decl office:value-type="string" text:name="'.$fname.'" office:string-value="'.$fvalue.'"/>';
+ }
+ $value .= '</text:user-field-decls>';
+ return $value;
+ }
+
+ /* Add missing styles in the template */
+ function _odtStyles() {
+ $value = '';
+ $existing_styles = io_readFile($this->temp_dir.'/styles.xml');
+ foreach ($this->styles as $stylename=>$stylexml) {
+ if (strpos($existing_styles, 'style:name="'.$stylename.'"') === FALSE) {
+ $value .= $stylexml;
+ }
+ }
+ // Loop on bullet/numerotation styles
+ if (strpos($existing_styles, 'style:name="List_20_1"') === FALSE) {
+ $value .= '<text:list-style style:name="List_20_1" style:display-name="List 1">';
+ for ($i=1;$i<=10;$i++) {
+ $value .= '<text:list-level-style-bullet text:level="'.$i.'" text:style-name="Numbering_20_Symbols" text:bullet-char="•">
+ <style:list-level-properties text:space-before="'.(0.4*($i-1)).'cm" text:min-label-width="0.4cm"/>
+ <style:text-properties style:font-name="StarSymbol"/>
+ </text:list-level-style-bullet>';
+ }
+ $value .= '</text:list-style>';
+ }
+ if (strpos($existing_styles, 'style:name="Numbering_20_1"') === FALSE) {
+ $value .= '<text:list-style style:name="Numbering_20_1" style:display-name="Numbering 1">';
+ for ($i=1;$i<=10;$i++) {
+ $value .= '<text:list-level-style-number text:level="'.$i.'" text:style-name="Numbering_20_Symbols" style:num-suffix="." style:num-format="1">
+ <style:list-level-properties text:space-before="'.(0.5*($i-1)).'cm" text:min-label-width="0.5cm"/>
+ </text:list-level-style-number>';
+ }
+ $value .= '</text:list-style>';
+ }
+ return $value;
+ }
+
+ /* Add missing fonts in the template */
+ function _odtFonts() {
+ $value = '';
+ $existing_styles = io_readFile($this->temp_dir.'/styles.xml');
+ foreach ($this->fonts as $name=>$xml) {
+ if (strpos($existing_styles, 'style:name="'.$name.'"') === FALSE) {
+ $value .= $xml;
+ }
+ }
+ return $value;
+ }
+
+ function cdata($text) {
+ $this->doc .= $this->_xmlEntities($text);
+ }
+
+ function p_open($style='Text_20_body'){
+ if (!$this->in_paragraph) { // opening a paragraph inside another paragraph is illegal
+ $this->in_paragraph = true;
+ $this->doc .= '<text:p text:style-name="'.$style.'">';
+ }
+ }
+
+ function p_close(){
+ if ($this->in_paragraph) {
+ $this->in_paragraph = false;
+ $this->doc .= '</text:p>';
+ }
+ }
+
+ function header($text, $level, $pos){
+ $hid = $this->_headerToLink($text,true);
+ $this->doc .= '<text:h text:style-name="Heading_20_'.$level.'" text:outline-level="'.$level.'">';
+ $this->doc .= '<text:bookmark-start text:name="'.$hid.'"/>';
+ $this->doc .= $this->_xmlEntities($text);
+ $this->doc .= '<text:bookmark-end text:name="'.$hid.'"/>';
+ $this->doc .= '</text:h>';
+ }
+
+ function hr() {
+ $this->doc .= '<text:p text:style-name="Horizontal_20_Line"/>';
+ }
+
+ function linebreak() {
+ $this->doc .= '<text:line-break/>';
+ }
+
+ function strong_open() {
+ $this->doc .= '<text:span text:style-name="Strong_20_Emphasis">';
+ }
+
+ function strong_close() {
+ $this->doc .= '</text:span>';
+ }
+
+ function emphasis_open() {
+ $this->doc .= '<text:span text:style-name="Emphasis">';
+ }
+
+ function emphasis_close() {
+ $this->doc .= '</text:span>';
+ }
+
+ function underline_open() {
+ $this->doc .= '<text:span text:style-name="underline">';
+ }
+
+ function underline_close() {
+ $this->doc .= '</text:span>';
+ }
+
+ function monospace_open() {
+ $this->doc .= '<text:span text:style-name="Source_20_Text">';
+ }
+
+ function monospace_close() {
+ $this->doc .= '</text:span>';
+ }
+
+ function subscript_open() {
+ $this->doc .= '<text:span text:style-name="sub">';
+ }
+
+ function subscript_close() {
+ $this->doc .= '</text:span>';
+ }
+
+ function superscript_open() {
+ $this->doc .= '<text:span text:style-name="sup">';
+ }
+
+ function superscript_close() {
+ $this->doc .= '</text:span>';
+ }
+
+ function deleted_open() {
+ $this->doc .= '<text:span text:style-name="del">';
+ }
+
+ function deleted_close() {
+ $this->doc .= '</text:span>';
+ }
+
+ /*
+ * Tables
+ */
+ function table_open($maxcols = NULL, $numrows = NULL){
+ $this->doc .= '<table:table>';
+ for($i=0; $i<$maxcols; $i++){
+ $this->doc .= '<table:table-column />';
+ }
+ }
+
+ function table_close(){
+ $this->doc .= '</table:table>';
+ }
+
+ function tablerow_open(){
+ $this->doc .= '<table:table-row>';
+ }
+
+ function tablerow_close(){
+ $this->doc .= '</table:table-row>';
+ }
+
+ function tableheader_open($colspan = 1, $align = "left"){
+ $this->doc .= '<table:table-cell office:value-type="string" table:style-name="tableheader" ';
+ //$this->doc .= ' table:style-name="tablealign'.$align.'"';
+ if ( $colspan > 1 ) {
+ $this->doc .= ' table:number-columns-spanned="'.$colspan.'"';
+ }
+ $this->doc .= '>';
+ $this->p_open('Table_20_Heading');
+ }
+
+ function tableheader_close(){
+ $this->p_close();
+ $this->doc .= '</table:table-cell>';
+ }
+
+ function tablecell_open($colspan = 1, $align = "left"){
+ $this->doc .= '<table:table-cell office:value-type="string" table:style-name="tablecell" ';
+ if ( $colspan > 1 ) {
+ $this->doc .= ' table:number-columns-spanned="'.$colspan.'"';
+ }
+ $this->doc .= '>';
+ if (!$align) $align = "left";
+ $style = "tablealign".$align;
+ $this->p_open($style);
+ }
+
+ function tablecell_close(){
+ $this->p_close();
+ $this->doc .= '</table:table-cell>';
+ }
+
+ /**
+ * Callback for footnote start syntax
+ *
+ * All following content will go to the footnote instead of
+ * the document. To achieve this the previous rendered content
+ * is moved to $store and $doc is cleared
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function footnote_open() {
+
+ // move current content to store and record footnote
+ $this->store = $this->doc;
+ $this->doc = '';
+ }
+
+ /**
+ * Callback for footnote end syntax
+ *
+ * All rendered content is moved to the $footnotes array and the old
+ * content is restored from $store again
+ *
+ * @author Andreas Gohr
+ */
+ function footnote_close() {
+ // recover footnote into the stack and restore old content
+ $footnote = $this->doc;
+ $this->doc = $this->store;
+ $this->store = '';
+
+ // check to see if this footnote has been seen before
+ $i = array_search($footnote, $this->footnotes);
+
+ if ($i === false) {
+ $i = count($this->footnotes);
+ // its a new footnote, add it to the $footnotes array
+ $this->footnotes[$i] = $footnote;
+
+ $this->doc .= '<text:note text:id="ftn'.$i.'" text:note-class="footnote">';
+ $this->doc .= '<text:note-citation>'.($i+1).'</text:note-citation>';
+ $this->doc .= '<text:note-body>';
+ $this->doc .= '<text:p text:style-name="Footnote">';
+ $this->doc .= $footnote;
+ $this->doc .= '</text:p>';
+ $this->doc .= '</text:note-body>';
+ $this->doc .= '</text:note>';
+
+ } else {
+ // seen this one before - just reference it FIXME: style isn't correct yet
+ $this->doc .= '<text:note-ref text:note-class="footnote" text:ref-name="ftn'.$i.'">'.($i+1).'</text:note-ref>';
+ }
+ }
+
+ function listu_open() {
+ $this->p_close();
+ $this->doc .= '<text:list text:style-name="List_20_1">';
+ }
+
+ function listu_close() {
+ $this->doc .= '</text:list>';
+ }
+
+ function listo_open() {
+ $this->p_close();
+ $this->doc .= '<text:list text:style-name="Numbering_20_1">';
+ }
+
+ function listo_close() {
+ $this->doc .= '</text:list>';
+ }
+
+ function listitem_open($level) {
+ $this->in_list_item = true;
+ $this->doc .= '<text:list-item>';
+ }
+
+ function listitem_close() {
+ $this->in_list_item = false;
+ $this->doc .= '</text:list-item>';
+ }
+
+ function listcontent_open() {
+ $this->doc .= '<text:p text:style-name="Text_20_body">';
+ }
+
+ function listcontent_close() {
+ $this->doc .= '</text:p>';
+ }
+
+ function unformatted($text) {
+ $this->doc .= $this->_xmlEntities($text);
+ }
+
+ function acronym($acronym) {
+ $this->doc .= $this->_xmlEntities($acronym);
+ }
+
+ function smiley($smiley) {
+ if ( array_key_exists($smiley, $this->smileys) ) {
+ $src = DOKU_INC."lib/images/smileys/".$this->smileys[$smiley];
+ $this->_odtAddImage($src);
+ } else {
+ $this->doc .= $this->_xmlEntities($smiley);
+ }
+ }
+
+ function entity($entity) {
+ # UTF-8 entity decoding is broken in PHP <5
+ if (version_compare(phpversion(), "5.0.0") and array_key_exists($entity, $this->entities) ) {
+ # decoding may fail for missing Multibyte-Support in entity_decode
+ $dec = @html_entity_decode($this->entities[$entity],ENT_NOQUOTES,'UTF-8');
+ if($dec){
+ $this->doc .= $this->_xmlEntities($dec);
+ }else{
+ $this->doc .= $this->_xmlEntities($entity);
+ }
+ } else {
+ $this->doc .= $this->_xmlEntities($entity);
+ }
+ }
+
+ function multiplyentity($x, $y) {
+ $this->doc .= $x.'×'.$y;
+ }
+
+ function singlequoteopening() {
+ global $lang;
+ $this->doc .= $lang['singlequoteopening'];
+ }
+
+ function singlequoteclosing() {
+ global $lang;
+ $this->doc .= $lang['singlequoteclosing'];
+ }
+
+ function apostrophe() {
+ global $lang;
+ $this->doc .= $lang['apostrophe'];
+ }
+
+ function doublequoteopening() {
+ global $lang;
+ $this->doc .= $lang['doublequoteopening'];
+ }
+
+ function doublequoteclosing() {
+ global $lang;
+ $this->doc .= $lang['doublequoteclosing'];
+ }
+
+ function php($text, $wrapper='dummy') {
+ $this->monospace_open();
+ $this->doc .= $this->_xmlEntities($text);
+ $this->monospace_close();
+ }
+ function phpblock($text) {
+ $this->file($text);
+ }
+
+ function html($text, $wrapper='dummy') {
+ $this->monospace_open();
+ $this->doc .= $this->_xmlEntities($text);
+ $this->monospace_close();
+ }
+ function htmlblock($text) {
+ $this->file($text);
+ }
+
+ /**
+ * static call back to replace spaces
+ */
+ function _preserveSpace($matches){
+ $spaces = $matches[1];
+ $len = strlen($spaces);
+ return '<text:s text:c="'.$len.'"/>';
+ }
+
+ function preformatted($text) {
+ $text = $this->_xmlEntities($text);
+ if (strpos($text, "\n") !== FALSE and strpos($text, "\n") == 0) {
+ // text starts with a newline, remove it
+ $text = substr($text,1);
+ }
+ $text = str_replace("\n",'<text:line-break/>',$text);
+ $text = preg_replace_callback('/( +)/',array('renderer_plugin_odt','_preserveSpace'),$text);
+
+ if ($this->in_list_item) { // if we're in a list item, we must close the <text:p> tag
+ $this->doc .= '</text:p>';
+ $this->doc .= '<text:p text:style-name="Preformatted_20_Text">';
+ $this->doc .= $text;
+ $this->doc .= '</text:p>';
+ $this->doc .= '<text:p>';
+ } else {
+ $this->doc .= '<text:p text:style-name="Preformatted_20_Text">';
+ $this->doc .= $text;
+ $this->doc .= '</text:p>';
+ }
+ }
+
+ function file($text) {
+ $this->preformatted($text);
+ }
+
+ function quote_open() {
+ if (!$this->in_paragraph) { // only start a new par if we're not already in one
+ $this->p_open();
+ }
+ $this->doc .= "&gt;";
+ }
+
+ function quote_close() {
+ if ($this->in_paragraph) { // only close the paragraph if we're actually in one
+ $this->p_close();
+ }
+ }
+
+ function code($text, $language = NULL) {
+ // FIXME we could convert GeSHi HTML and CSS classes to ODT XML here
+ $this->preformatted($text);
+ }
+
+ function internalmedia ($src, $title=NULL, $align=NULL, $width=NULL,
+ $height=NULL, $cache=NULL, $linking=NULL) {
+ global $conf;
+ global $ID;
+ resolve_mediaid(getNS($ID),$src, $exists);
+ list($ext,$mime) = mimetype($src);
+
+ if(substr($mime,0,5) == 'image'){
+ $file = mediaFN($src);
+ $this->_odtAddImage($file, $width, $height, $align, $title);
+ }else{
+ // FIXME build absolute medialink and call externallink()
+ $this->code('FIXME internalmedia: '.$src);
+ }
+ }
+
+ function externalmedia ($src, $title=NULL, $align=NULL, $width=NULL,
+ $height=NULL, $cache=NULL, $linking=NULL) {
+ global $conf;
+ global $ID;
+ list($ext,$mime) = mimetype($src);
+
+ if(substr($mime,0,5) == 'image'){
+ if($width) {
+ $width = 'svg:width="'.(($width/96.0)*2.54).'cm"';
+ } else {
+ $width = 'svg:rel-width="100%"';
+ }
+ if($height) {
+ $height = 'svg:height="'.(($height/96.0)*2.54).'cm"';
+ } else {
+ $height = 'svg:rel-height="100%"';
+ }
+
+ $style = 'media'.$align;
+ if($align){
+ $anchor = 'paragraph';
+ }else{
+ $anchor = 'as-char';
+ }
+
+ $this->doc .= '<draw:frame draw:style-name="'.$style.'" draw:name="'.$this->_xmlEntities($title).'"
+ text:anchor-type="'.$anchor.'" draw:z-index="0"
+ '.$width.' '.$height.' >';
+ $this->doc .= '<draw:image xlink:href="'.$this->_xmlEntities($src).'"
+ xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>';
+ $this->doc .= '</draw:frame>';
+ }else{
+ $this->externallink($src,$title);
+ }
+ }
+
+ function camelcaselink($link) {
+ $this->internallink($link,$link);
+ }
+
+ function reference($id, $name = NULL) {
+ $this->doc .= '<text:a xlink:type="simple" xlink:href="#'.$id.'"';
+ if ($name) {
+ $this->doc .= '>'.$this->_xmlEntities($name).'</text:a>';
+ } else {
+ $this->doc .= '/>';
+ }
+ }
+
+ /**
+ * Render an internal Wiki Link
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function internallink($id, $name = NULL) {
+ global $conf;
+ global $ID;
+ // default name is based on $id as given
+ $default = $this->_simpleTitle($id);
+ // now first resolve and clean up the $id
+ resolve_pageid(getNS($ID),$id,$exists);
+ $name = $this->_getLinkTitle($name, $default, $isImage, $id);
+
+ // build the absolute URL (keeping a hash if any)
+ list($id,$hash) = explode('#',$id,2);
+ $url = wl($id,'',true);
+ if($hash) $url .='#'.$hash;
+
+ if ($ID == $id) {
+ $this->reference($hash, $name);
+ } else {
+ $this->_doLink($url,$name);
+ }
+ }
+
+ /**
+ * Add external link
+ */
+ function externallink($url, $name = NULL) {
+ global $conf;
+
+ $name = $this->_getLinkTitle($name, $url, $isImage);
+
+ $this->_doLink($url,$name);
+ }
+
+ /**
+ * Just print local links
+ *
+ * @fixme add image handling
+ */
+ function locallink($hash, $name = NULL){
+ $name = $this->_getLinkTitle($name, $hash, $isImage);
+ $this->doc .= $name;
+ }
+
+ /**
+ * InterWiki links
+ */
+ function interwikilink($match, $name = NULL, $wikiName, $wikiUri) {
+ $name = $this->_getLinkTitle($name, $wikiUri, $isImage);
+ $url = $this-> _resolveInterWiki($wikiName,$wikiUri);
+ $this->_doLink($url,$name);
+ }
+
+ /**
+ * Just print WindowsShare links
+ *
+ * @fixme add image handling
+ */
+ function windowssharelink($url, $name = NULL) {
+ $name = $this->_getLinkTitle($name, $url, $isImage);
+ $this->doc .= $name;
+ }
+
+ /**
+ * Just print email links
+ *
+ * @fixme add image handling
+ */
+ function emaillink($address, $name = NULL) {
+ $name = $this->_getLinkTitle($name, $address, $isImage);
+ $this->_doLink("mailto:".$address,$name);
+ }
+
+ /**
+ * Add a hyperlink, handling Images correctly
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _doLink($url,$name){
+ $url = $this->_xmlEntities($url);
+ if(is_array($name)){
+ // Images
+ if($url) $this->doc .= '<draw:a xlink:type="simple" xlink:href="'.$url.'">';
+
+ if($name['type'] == 'internalmedia'){
+ $this->internalmedia($name['src'],
+ $name['title'],
+ $name['align'],
+ $name['width'],
+ $name['height'],
+ $name['cache'],
+ $name['linking']);
+ }
+
+ if($url) $this->doc .= '</draw:a>';
+ }else{
+ // Text
+ if($url) $this->doc .= '<text:a xlink:type="simple" xlink:href="'.$url.'">';
+ $this->doc .= $name; // we get the name already XML encoded
+ if($url) $this->doc .= '</text:a>';
+ }
+ }
+
+ /**
+ * Construct a title and handle images in titles
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ */
+ function _getLinkTitle($title, $default, & $isImage, $id=null) {
+ global $conf;
+
+ $isImage = false;
+ if ( is_null($title) ) {
+ if ($conf['useheading'] && $id) {
+ $heading = p_get_first_heading($id);
+ if ($heading) {
+ return $this->_xmlEntities($heading);
+ }
+ }
+ return $this->_xmlEntities($default);
+ } else if ( is_string($title) ) {
+ return $this->_xmlEntities($title);
+ } else if ( is_array($title) ) {
+ $isImage = true;
+ return $title;
+ }
+ }
+
+ /**
+ * Creates a linkid from a headline
+ *
+ * @param string $title The headline title
+ * @param boolean $create Create a new unique ID?
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _headerToLink($title,$create=false) {
+ $title = str_replace(':','',cleanID($title));
+ $title = ltrim($title,'0123456789._-');
+ if(empty($title)) $title='section';
+
+ if($create){
+ // make sure tiles are unique
+ $num = '';
+ while(in_array($title.$num,$this->headers)){
+ ($num) ? $num++ : $num = 1;
+ }
+ $title = $title.$num;
+ $this->headers[] = $title;
+ }
+
+ return $title;
+ }
+
+
+ function _xmlEntities($value) {
+ return str_replace( array('&','"',"'",'<','>'), array('&#38;','&#34;','&#39;','&#60;','&#62;'), $value);
+ }
+
+ function rss ($url,$params){
+ global $lang;
+ global $conf;
+
+ require_once(DOKU_INC.'inc/FeedParser.php');
+ $feed = new FeedParser();
+ $feed->feed_url($url);
+
+ //disable warning while fetching
+ if (!defined('DOKU_E_LEVEL')) { $elvl = error_reporting(E_ERROR); }
+ $rc = $feed->init();
+ if (!defined('DOKU_E_LEVEL')) { error_reporting($elvl); }
+
+ //decide on start and end
+ if($params['reverse']){
+ $mod = -1;
+ $start = $feed->get_item_quantity()-1;
+ $end = $start - ($params['max']);
+ $end = ($end < -1) ? -1 : $end;
+ }else{
+ $mod = 1;
+ $start = 0;
+ $end = $feed->get_item_quantity();
+ $end = ($end > $params['max']) ? $params['max'] : $end;;
+ }
+
+ $this->listu_open();
+ if($rc){
+ for ($x = $start; $x != $end; $x += $mod) {
+ $item = $feed->get_item($x);
+ $this->listitem_open(0);
+ $this->listcontent_open();
+ $this->externallink($item->get_permalink(),
+ $item->get_title());
+ if($params['author']){
+ $author = $item->get_author(0);
+ if($author){
+ $name = $author->get_name();
+ if(!$name) $name = $author->get_email();
+ if($name) $this->cdata(' '.$lang['by'].' '.$name);
+ }
+ }
+ if($params['date']){
+ $this->cdata(' ('.$item->get_date($conf['dformat']).')');
+ }
+ if($params['details']){
+ $this->cdata(strip_tags($item->get_description()));
+ }
+ $this->listcontent_close();
+ $this->listitem_close();
+ }
+ }else{
+ $this->listitem_open(0);
+ $this->listcontent_open();
+ $this->emphasis_open();
+ $this->cdata($lang['rssfailed']);
+ $this->emphasis_close();
+ $this->externallink($url);
+ $this->listcontent_close();
+ $this->listitem_close();
+ }
+ $this->listu_close();
+ }
+
+
+ function _odtAddImage($src, $width = NULL, $height = NULL, $align = NULL, $title = NULL, $style = NULL){
+ list($ext,$mime) = mimetype($src);
+ $name = 'Pictures/'.md5($src).'.'.$ext;
+ if(!$this->manifest[$name]){
+ $this->manifest[$name] = $mime;
+ $this->ZIP->add_File(io_readfile($src,false),$name,0);
+ }
+ // make sure width and height is available
+ // FIXME we don't have the dimension of an external file
+ // (except it's cached, but this is not the default) there seems
+ // to be no way to specify "use original image" in ODF - thus
+ // a hardcoded default size of 200 pixel here
+ if(!$width || !$height){
+ $info = getimagesize($src);
+ if(!$width){
+ $width = $info[0];
+ $height = $info[1];
+ }else{
+ $height = round(($width * $info[1]) / $info[0]);
+ }
+ }
+
+ // convert from pixel to centimeters
+ $width = (($width/96.0)*2.54);
+ $height = (($height/96.0)*2.54);
+ // Don't be wider than the page
+ if ($width >= 17){ // FIXME : this assumes A4 page format with 2cm margins
+ $width = $width.'cm" style:rel-width="100%';
+ $height = $height.'cm" style:rel-height="scale';
+ } else {
+ $width = $width.'cm';
+ $height = $height.'cm';
+ }
+
+ if($align){
+ $anchor = 'paragraph';
+ }else{
+ $anchor = 'as-char';
+ }
+
+ if (!$style or !array_key_exists($style, $this->autostyles)) {
+ $style = 'media'.$align;
+ }
+
+ if ($title) {
+ $this->doc .= '<draw:frame draw:style-name="'.$style.'" draw:name="'.$this->_xmlEntities($title).' Legend"
+ text:anchor-type="'.$anchor.'" draw:z-index="0" svg:width="'.$width.'">';
+ $this->doc .= '<draw:text-box>';
+ $this->doc .= '<text:p text:style-name="legendcenter">';
+ }
+ $this->doc .= '<draw:frame draw:style-name="'.$style.'" draw:name="'.$this->_xmlEntities($title).'"
+ text:anchor-type="'.$anchor.'" draw:z-index="0"
+ svg:width="'.$width.'" svg:height="'.$height.'" >';
+ $this->doc .= '<draw:image xlink:href="'.$this->_xmlEntities($name).'"
+ xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>';
+ $this->doc .= '</draw:frame>';
+ if ($title) {
+ $this->doc .= $this->_xmlEntities($title).'</text:p></draw:text-box></draw:frame>';
+ }
+ }
+
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/styles.xml b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/styles.xml
new file mode 100644
index 000000000..c328464f3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/styles.xml
@@ -0,0 +1,158 @@
+<?xml version="1.0"?>
+<!--
+ This file defines how the document is styled. This was extracted from a ODT file
+ created in OpenOffice 2.0 and could probably be much simpler.
+
+ You probably want to replace this file with a style fitting your corporate identity.
+
+ To do so, export the wiki:syntax page, edit it's style definitions (be sure to keep
+ the names) and save the resulting file. Extract the resulting file with unzip and
+ copy the styles.xml over this one.
+-->
+<office:document-styles xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" office:version="1.0">
+ <office:font-face-decls>
+ <style:font-face style:name="StarSymbol" svg:font-family="StarSymbol"/>
+ <style:font-face style:name="Bitstream Vera Sans Mono" svg:font-family="'Bitstream Vera Sans Mono'" style:font-family-generic="modern" style:font-pitch="fixed"/>
+ <style:font-face style:name="Bitstream Vera Sans" svg:font-family="'Bitstream Vera Sans'" style:font-family-generic="roman" style:font-pitch="variable"/>
+ <style:font-face style:name="Bitstream Vera Sans1" svg:font-family="'Bitstream Vera Sans'" style:font-family-generic="swiss" style:font-pitch="variable"/>
+ <style:font-face style:name="Bitstream Vera Sans2" svg:font-family="'Bitstream Vera Sans'" style:font-family-generic="system" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+ <style:default-style style:family="graphic">
+ <style:graphic-properties draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:flow-with-text="false"/>
+ <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:writing-mode="lr-tb" style:font-independent-line-spacing="false">
+ <style:tab-stops/>
+ </style:paragraph-properties>
+ <style:text-properties style:use-window-font-color="true" fo:font-size="12pt" style:font-size-asian="12pt" style:font-size-complex="12pt"/>
+ </style:default-style>
+ <style:default-style style:family="paragraph">
+ <style:paragraph-properties fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.251cm" style:writing-mode="page"/>
+ <style:text-properties style:use-window-font-color="true" style:font-name="Bitstream Vera Sans" fo:font-size="12pt" style:font-name-asian="Bitstream Vera Sans2" style:font-size-asian="12pt" style:font-name-complex="Bitstream Vera Sans2" style:font-size-complex="12pt" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2"/>
+ </style:default-style>
+ <style:default-style style:family="table">
+ <style:table-properties table:border-model="collapsing"/>
+ </style:default-style>
+ <style:default-style style:family="table-row">
+ <style:table-row-properties fo:keep-together="auto"/>
+ </style:default-style>
+ <style:style style:name="Standard" style:family="paragraph" style:class="text"/>
+ <style:style style:name="Text_20_body" style:display-name="Text body" style:family="paragraph" style:parent-style-name="Standard" style:class="text">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.212cm" fo:text-align="justify" style:justify-single-word="false"/>
+ </style:style>
+ <style:style style:name="Heading" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text_20_body" style:class="text">
+ <style:paragraph-properties fo:margin-top="0.423cm" fo:margin-bottom="0.212cm" fo:keep-with-next="always"/>
+ <style:text-properties style:font-name="Bitstream Vera Sans1" fo:font-size="14pt" style:font-name-asian="Bitstream Vera Sans2" style:font-size-asian="14pt" style:font-name-complex="Bitstream Vera Sans2" style:font-size-complex="14pt"/>
+ </style:style>
+ <style:style style:name="Heading_20_1" style:display-name="Heading 1" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:class="text" style:default-outline-level="1">
+ <style:text-properties style:font-name="Bitstream Vera Sans" fo:font-size="24pt" fo:font-weight="bold" style:font-name-asian="Bitstream Vera Sans2" style:font-size-asian="24pt" style:font-weight-asian="bold" style:font-name-complex="Bitstream Vera Sans2" style:font-size-complex="24pt" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="Heading_20_2" style:display-name="Heading 2" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:class="text" style:default-outline-level="2">
+ <style:text-properties style:font-name="Bitstream Vera Sans" fo:font-size="18pt" fo:font-weight="bold" style:font-name-asian="Bitstream Vera Sans2" style:font-size-asian="18pt" style:font-weight-asian="bold" style:font-name-complex="Bitstream Vera Sans2" style:font-size-complex="18pt" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="Heading_20_3" style:display-name="Heading 3" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:class="text" style:default-outline-level="3">
+ <style:text-properties style:font-name="Bitstream Vera Sans" fo:font-size="14pt" fo:font-weight="bold" style:font-name-asian="Bitstream Vera Sans2" style:font-size-asian="14pt" style:font-weight-asian="bold" style:font-name-complex="Bitstream Vera Sans2" style:font-size-complex="14pt" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="Heading_20_4" style:display-name="Heading 4" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:class="text" style:default-outline-level="4">
+ <style:text-properties style:font-name="Bitstream Vera Sans" fo:font-size="12pt" fo:font-weight="bold" style:font-name-asian="Bitstream Vera Sans2" style:font-size-asian="12pt" style:font-weight-asian="bold" style:font-name-complex="Bitstream Vera Sans2" style:font-size-complex="12pt" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="Heading_20_5" style:display-name="Heading 5" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:class="text" style:default-outline-level="5">
+ <style:text-properties style:font-name="Bitstream Vera Sans" fo:font-size="10pt" fo:font-weight="bold" style:font-name-asian="Bitstream Vera Sans2" style:font-size-asian="10pt" style:font-weight-asian="bold" style:font-name-complex="Bitstream Vera Sans2" style:font-size-complex="10pt" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="List" style:family="paragraph" style:parent-style-name="Text_20_body" style:class="list"/>
+ <style:style style:name="Table_20_Contents" style:display-name="Table Contents" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
+ <style:paragraph-properties text:number-lines="false" text:line-number="0"/>
+ </style:style>
+ <style:style style:name="Table_20_Heading" style:display-name="Table Heading" style:family="paragraph" style:parent-style-name="Table_20_Contents" style:class="extra">
+ <style:paragraph-properties fo:text-align="center" style:justify-single-word="false" text:number-lines="false" text:line-number="0"/>
+ <style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="Caption" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
+ <style:paragraph-properties fo:margin-top="0.212cm" fo:margin-bottom="0.212cm" text:number-lines="false" text:line-number="0"/>
+ <style:text-properties fo:font-size="12pt" fo:font-style="italic" style:font-size-asian="12pt" style:font-style-asian="italic" style:font-size-complex="12pt" style:font-style-complex="italic"/>
+ </style:style>
+ <style:style style:name="Index" style:family="paragraph" style:parent-style-name="Standard" style:class="index">
+ <style:paragraph-properties text:number-lines="false" text:line-number="0"/>
+ </style:style>
+ <style:style style:name="Quotations" style:family="paragraph" style:parent-style-name="Standard" style:class="html">
+ <style:paragraph-properties fo:margin-left="1cm" fo:margin-right="1cm" fo:margin-top="0cm" fo:margin-bottom="0.499cm" fo:text-indent="0cm" style:auto-text-indent="false"/>
+ </style:style>
+ <style:style style:name="Preformatted_20_Text" style:display-name="Preformatted Text" style:family="paragraph" style:parent-style-name="Standard" style:class="html">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm"/>
+ <style:text-properties style:font-name="Bitstream Vera Sans Mono" fo:font-size="10pt" style:font-name-asian="Bitstream Vera Sans Mono" style:font-size-asian="10pt" style:font-name-complex="Bitstream Vera Sans Mono" style:font-size-complex="10pt"/>
+ </style:style>
+ <style:style style:name="Horizontal_20_Line" style:display-name="Horizontal Line" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text_20_body" style:class="html">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.499cm" style:border-line-width-bottom="0.002cm 0.035cm 0.002cm" fo:padding="0cm" fo:border-left="none" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.039cm double #808080" text:number-lines="false" text:line-number="0" style:join-border="false"/>
+ <style:text-properties fo:font-size="6pt" style:font-size-asian="6pt" style:font-size-complex="6pt"/>
+ </style:style>
+ <style:style style:name="Footnote" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
+ <style:paragraph-properties fo:margin-left="0.5cm" fo:margin-right="0cm" fo:text-indent="-0.5cm" style:auto-text-indent="false" text:number-lines="false" text:line-number="0"/>
+ <style:text-properties fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
+ </style:style>
+ <style:style style:name="Numbering_20_Symbols" style:display-name="Numbering Symbols" style:family="text"/>
+ <style:style style:name="Bullet_20_Symbols" style:display-name="Bullet Symbols" style:family="text">
+ <style:text-properties style:font-name="StarSymbol" fo:font-size="9pt" style:font-name-asian="StarSymbol" style:font-size-asian="9pt" style:font-name-complex="StarSymbol" style:font-size-complex="9pt"/>
+ </style:style>
+ <style:style style:name="Internet_20_link" style:display-name="Internet link" style:family="text">
+ <style:text-properties fo:color="#000080" style:text-underline-style="solid" style:text-underline-width="auto" style:text-underline-color="font-color"/>
+ </style:style>
+ <style:style style:name="Emphasis" style:family="text">
+ <style:text-properties fo:font-style="italic" style:font-style-asian="italic" style:font-style-complex="italic"/>
+ </style:style>
+ <style:style style:name="Strong_20_Emphasis" style:display-name="Strong Emphasis" style:family="text">
+ <style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="Source_20_Text" style:display-name="Source Text" style:family="text">
+ <style:text-properties style:font-name="Bitstream Vera Sans Mono" style:font-name-asian="Bitstream Vera Sans Mono" style:font-name-complex="Bitstream Vera Sans Mono"/>
+ </style:style>
+ <style:style style:name="Graphics" style:family="graphic">
+ <style:graphic-properties text:anchor-type="paragraph" svg:x="0cm" svg:y="0cm" style:wrap="dynamic" style:number-wrapped-paragraphs="no-limit" style:wrap-contour="false" style:vertical-pos="top" style:vertical-rel="paragraph" style:horizontal-pos="center" style:horizontal-rel="paragraph"/>
+ </style:style>
+ <text:outline-style>
+ <text:outline-level-style text:level="1" style:num-format="">
+ <style:list-level-properties text:min-label-distance="0.381cm"/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="2" style:num-format="">
+ <style:list-level-properties text:min-label-distance="0.381cm"/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="3" style:num-format="">
+ <style:list-level-properties text:min-label-distance="0.381cm"/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="4" style:num-format="">
+ <style:list-level-properties text:min-label-distance="0.381cm"/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="5" style:num-format="">
+ <style:list-level-properties text:min-label-distance="0.381cm"/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="6" style:num-format="">
+ <style:list-level-properties text:min-label-distance="0.381cm"/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="7" style:num-format="">
+ <style:list-level-properties text:min-label-distance="0.381cm"/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="8" style:num-format="">
+ <style:list-level-properties text:min-label-distance="0.381cm"/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="9" style:num-format="">
+ <style:list-level-properties text:min-label-distance="0.381cm"/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="10" style:num-format="">
+ <style:list-level-properties text:min-label-distance="0.381cm"/>
+ </text:outline-level-style>
+ </text:outline-style>
+
+ <text:list-style style:name="Numbering_20_1" style:display-name="Numbering 1"/>
+ <text:list-style style:name="List_20_1" style:display-name="List 1"/>
+
+ <text:notes-configuration text:note-class="footnote" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/>
+ <text:notes-configuration text:note-class="endnote" style:num-format="i" text:start-value="0"/>
+ <text:linenumbering-configuration text:number-lines="false" text:offset="0.499cm" style:num-format="1" text:number-position="left" text:increment="5"/>
+
+ </office:styles>
+
+ <office:automatic-styles/>
+
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:page-layout-name="pm1"/>
+ </office:master-styles>
+</office:document-styles>
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/syntax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/syntax.php
new file mode 100644
index 000000000..a8d0832d7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/syntax.php
@@ -0,0 +1,96 @@
+<?php
+/**
+ * ODT Plugin: Exports to ODT
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Aurelien Bompard <aurelien@bompard.org>
+ */
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'syntax.php');
+
+class syntax_plugin_odt extends DokuWiki_Syntax_Plugin {
+
+ /**
+ * return some info
+ */
+ function getInfo(){
+ return confToHash(dirname(__FILE__).'/info.txt');
+ }
+
+ /**
+ * What kind of syntax are we?
+ */
+ function getType(){
+ return 'substition';
+ }
+
+ /**
+ * What about paragraphs?
+ */
+ function getPType(){
+ return 'normal';
+ }
+
+ /**
+ * Where to sort in?
+ */
+ function getSort(){
+ return 319; // Before image detection, which uses {{...}} and is 320
+ }
+
+ /**
+ * Connect pattern to lexer
+ */
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern('~~ODT~~',$mode,'plugin_odt');
+ $this->Lexer->addSpecialPattern('{{odt>.+?}}',$mode,'plugin_odt');
+ }
+
+ /**
+ * Handle the match
+ */
+ function handle($match, $state, $pos, &$handler){
+ // Export button
+ if ($match == '~~ODT~~') { return array(); }
+ // Extended info
+ $match = substr($match,6,-2); //strip markup
+ $extinfo = explode(':',$match);
+ $info_type = $extinfo[0];
+ if (count($extinfo) < 2) { // no value
+ $info_value = '';
+ } elseif (count($extinfo) == 2) {
+ $info_value = $extinfo[1];
+ } else { // value may contain colons
+ $info_value = implode(array_slice($extinfo,1), ':');
+ }
+ return array($info_type, $info_value);
+ }
+
+ /**
+ * Create output
+ */
+ function render($format, &$renderer, $data) {
+ global $ID, $REV;
+ if (!$data) { // Export button
+ if($format != 'xhtml') return false;
+ $renderer->doc .= '<a href="'.exportlink($ID, 'odt', ($REV != '' ? 'rev='.$REV : '')).'" title="'.$this->getLang('view').'">';
+ $renderer->doc .= '<img src="'.DOKU_BASE.'lib/plugins/odt/odt.png" align="right" alt="'.$this->getLang('view').'" width="48" height="48" />';
+ $renderer->doc .= '</a>';
+ return true;
+ } else { // Extended info
+ list($info_type, $info_value) = $data;
+ if ($info_type == "template") { // Template-based export
+ $renderer->template = $info_value;
+ p_set_metadata($ID, array("relation"=> array("odt"=>array("template"=>$info_value))));
+ }
+ }
+ return false;
+ }
+
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/admin.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/admin.php
new file mode 100644
index 000000000..b24b1ff6e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/admin.php
@@ -0,0 +1,202 @@
+<?php
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'admin.php');
+require_once(DOKU_INC.'inc/changelog.php');
+
+/**
+ * All DokuWiki plugins to extend the admin function
+ * need to inherit from this class
+ */
+class admin_plugin_revert extends DokuWiki_Admin_Plugin {
+ var $cmd;
+ // some vars which might need tuning later
+ var $max_lines = 800; // lines to read from changelog
+ var $max_revs = 20; // numer of old revisions to check
+
+
+ /**
+ * Constructor
+ */
+ function admin_plugin_revert(){
+ $this->setupLocale();
+ }
+
+ /**
+ * return some info
+ */
+ function getInfo(){
+ return array(
+ 'author' => 'Andreas Gohr',
+ 'email' => 'andi@splitbrain.org',
+ 'date' => '2008-12-10',
+ 'name' => 'Revert Manager',
+ 'desc' => 'Allows you to mass revert recent edits',
+ 'url' => 'http://dokuwiki.org/plugin:revert',
+ );
+ }
+
+ /**
+ * access for managers
+ */
+ function forAdminOnly(){
+ return false;
+ }
+
+ /**
+ * return sort order for position in admin menu
+ */
+ function getMenuSort() {
+ return 40;
+ }
+
+ /**
+ * handle user request
+ */
+ function handle() {
+ }
+
+ /**
+ * output appropriate html
+ */
+ function html() {
+
+ echo $this->plugin_locale_xhtml('intro');
+
+ $this->_searchform();
+
+ if(is_array($_REQUEST['revert']) && checkSecurityToken()){
+ $this->_revert($_REQUEST['revert'],$_REQUEST['filter']);
+ }elseif(isset($_REQUEST['filter'])){
+ $this->_list($_REQUEST['filter']);
+ }
+ }
+
+ /**
+ * Display the form for searching spam pages
+ */
+ function _searchform(){
+ global $lang;
+ echo '<form action="" method="post"><div class="no">';
+ echo '<label>'.$this->getLang('filter').': </label>';
+ echo '<input type="text" name="filter" class="edit" value="'.hsc($_REQUEST['filter']).'" />';
+ echo '<input type="submit" class="button" value="'.$lang['btn_search'].'" />';
+ echo ' <span>'.$this->getLang('note1').'</span>';
+ echo '</div></form><br /><br />';
+ }
+
+ /**
+ * Start the reversion process
+ */
+ function _revert($revert,$filter){
+ global $conf;
+
+ echo '<hr /><br />';
+ echo '<p>'.$this->getLang('revstart').'</p>';
+
+ echo '<ul>';
+ foreach($revert as $id){
+ global $REV;
+
+ // find the last non-spammy revision
+ $data = '';
+ $old = getRevisions($id, 0, $this->max_revs);
+ if(count($old)){
+ foreach($old as $REV){
+ $data = rawWiki($id,$REV);
+ if(strpos($data,$filter) === false) break;
+ }
+ }
+
+ if($data){
+ saveWikiText($id,$data,'old revision restored',false);
+ printf('<li><div class="li">'.$this->getLang('reverted').'</div></li>',$id,$REV);
+ }else{
+ saveWikiText($id,'','',false);
+ printf('<li><div class="li">'.$this->getLang('removed').'</div></li>',$id);
+ }
+ @set_time_limit(10);
+ flush();
+ }
+ echo '</ul>';
+
+ echo '<p>'.$this->getLang('revstop').'</p>';
+ }
+
+ /**
+ * List recent edits matching the given filter
+ */
+ function _list($filter){
+ global $conf;
+ echo '<hr /><br />';
+ echo '<form action="" method="post"><div class="no">';
+ echo '<input type="hidden" name="filter" value="'.hsc($filter).'" />';
+ formSecurityToken();
+
+ $recents = getRecents(0,$this->max_lines);
+ echo '<ul>';
+
+
+ $cnt = 0;
+ foreach($recents as $recent){
+ if($filter){
+ if(strpos(rawWiki($recent['id']),$filter) === false) continue;
+ }
+
+ $cnt++;
+ $date = strftime($conf['dformat'],$recent['date']);
+
+ echo ($recent['type']===DOKU_CHANGE_TYPE_MINOR_EDIT) ? '<li class="minor">' : '<li>';
+ echo '<div class="li">';
+ echo '<input type="checkbox" name="revert[]" value="'.hsc($recent['id']).'" checked="checked" id="revert__'.$cnt.'" />';
+ echo '<label for="revert__'.$cnt.'">'.$date.'</label> ';
+
+ echo '<a href="'.wl($recent['id'],"do=diff").'">';
+ $p = array();
+ $p['src'] = DOKU_BASE.'lib/images/diff.png';
+ $p['width'] = 15;
+ $p['height'] = 11;
+ $p['title'] = $lang['diff'];
+ $p['alt'] = $lang['diff'];
+ $att = buildAttributes($p);
+ echo "<img $att />";
+ echo '</a> ';
+
+ echo '<a href="'.wl($recent['id'],"do=revisions").'">';
+ $p = array();
+ $p['src'] = DOKU_BASE.'lib/images/history.png';
+ $p['width'] = 12;
+ $p['height'] = 14;
+ $p['title'] = $lang['btn_revs'];
+ $p['alt'] = $lang['btn_revs'];
+ $att = buildAttributes($p);
+ echo "<img $att />";
+ echo '</a> ';
+
+ echo html_wikilink(':'.$recent['id'],(useHeading('navigation'))?NULL:$recent['id']);
+ echo ' &ndash; '.htmlspecialchars($recent['sum']);
+
+ echo ' <span class="user">';
+ echo $recent['user'].' '.$recent['ip'];
+ echo '</span>';
+
+ echo '</div>';
+ echo '</li>';
+
+ @set_time_limit(10);
+ flush();
+ }
+ echo '</ul>';
+
+ echo '<p>';
+ echo '<input type="submit" class="button" value="'.$this->getLang('revert').'" /> ';
+ printf($this->getLang('note2'),hsc($filter));
+ echo '</p>';
+
+ echo '</div></form>';
+ }
+
+}
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/af/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/af/lang.php
new file mode 100644
index 000000000..1fff08db3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/af/lang.php
@@ -0,0 +1,5 @@
+<?php
+/**
+ * Afrikaans language file
+ *
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ar/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ar/lang.php
new file mode 100644
index 000000000..cdab0cf43
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ar/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * Arabic language file
+ *
+ * @author Yaman Hokan <always.smile.yh@hotmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/bg/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/bg/intro.txt
new file mode 100644
index 000000000..ab7308d6d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/bg/intro.txt
@@ -0,0 +1,4 @@
+====== ВъзÑтановÑване ======
+
+Тази Ñтраница помага при автоматичното възÑтановÑване от Ñпам-атака. За да намерите ÑпиÑък ÑÑŠÑ Ñпамнати Ñтраници, въведете текÑÑ‚ за Ñ‚ÑŠÑ€Ñене(пр. Ñпам препратка), Ñлед това потвърдете, че намерените Ñтраници Ñа наиÑтина Ñпам и възÑтановете редакциите.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/bg/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/bg/lang.php
new file mode 100644
index 000000000..6f0ff0672
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/bg/lang.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * bulgarian language file
+ * @author Nikolay Vladimirov <nikolay@vladimiroff.com>
+ * @author Viktor Usunov <usun0v@mail.bg>
+ */
+$lang['menu'] = 'ВъзÑтановÑване';
+$lang['filter'] = 'ТърÑене на Ñпамната Ñтраници';
+$lang['revert'] = 'Избрани Ñтраници за възÑтановÑване';
+$lang['reverted'] = '%s върнат до верÑÐ¸Ñ %s';
+$lang['removed'] = '%s премахнат';
+$lang['revstart'] = 'ПроцеÑÑŠÑ‚ на възÑтановÑване започна. Това може да отнеме много време. Ðко Ñкриптът Ñе проÑрочи преди да завърши, Ñ‚Ñ€Ñбва да възÑтановÑвате на по-малки парчета.';
+$lang['revstop'] = 'ПроцеÑÑŠÑ‚ на възÑтановÑване завърши уÑпешно.';
+$lang['note1'] = 'Забележка: за Ñ‚ÑŠÑ€Ñенето имат значение малки/големи букви';
+$lang['note2'] = 'Забележка: Ñтраницата ще бъде възвърната без да Ñъдържа Ñпам терминът <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/intro.txt
new file mode 100644
index 000000000..fed2cb9cc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/intro.txt
@@ -0,0 +1,4 @@
+====== Gestor de reversions ======
+
+Esta pàgina ajuda en la reversió automàtica d'atacs de spam. Per a
+trobar una llista de pàgines que tinguen spam introduïxca una cadena de busca (p. e. una URL de spam), confirme que les pàgines trobades tenen realment spam i revertixca les edicions.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/lang.php
new file mode 100644
index 000000000..77dd5808e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/lang.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * valencian language file
+ * @author Bernat Arlandis <berarma@ya.com>
+ * @author Bernat Arlandis <berarma@llenguaitecnologia.com>
+ */
+$lang['menu'] = 'Gestor de reversions';
+$lang['filter'] = 'Buscar pàgines en spam';
+$lang['revert'] = 'Revertir pàgines seleccionades';
+$lang['reverted'] = '%s revertides a la versió %s';
+$lang['removed'] = '%s llevades';
+$lang['revstart'] = 'El procés de reversió ha començat. Açò pot dur prou de temps. Si es talla abans d\'acabar, haurà de revertir per parts.';
+$lang['revstop'] = 'El procés de reversió ha finalisat correctament.';
+$lang['note1'] = 'Nota: esta busca és sensible a mayúscules';
+$lang['note2'] = 'Nota: esta pàgina es revertirà a l\'última versió que no continga el spam definit pel terme <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca/intro.txt
new file mode 100644
index 000000000..0af2e8e6d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca/intro.txt
@@ -0,0 +1,3 @@
+====== Gestió de reversions ======
+
+Aquesta pàgina us ajuda a revertir automàticament els canvis que siguin producte d'un atac amb brossa. Per trobar la llista de pàgines atacades, cerqueu una cadena adequada (p. ex. un URL de propaganda), confirmeu que les pàgines trobades contenen realment brossa i llavors revertiu-les a revisions anteriors. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca/lang.php
new file mode 100644
index 000000000..b8800911f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca/lang.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Catalan language file
+ *
+ * @author Carles Bellver <carles.bellver@gmail.com>
+ * @author carles.bellver@gmail.com
+ * @author carles.bellver@cent.uji.es
+ * @author Carles Bellver <carles.bellver@cent.uji.es>
+ */
+$lang['menu'] = 'Gestió de reversions';
+$lang['filter'] = 'Cerca pàgines brossa';
+$lang['revert'] = 'Reverteix les pàgines seleccionades';
+$lang['reverted'] = 'S\'ha revertit %s a la revisió %s';
+$lang['removed'] = 'S\'ha suprimit %s';
+$lang['revstart'] = 'S\'ha iniciat el procés de reversió. Això pot trigar una bona estona. Si s\'excedeix el temps d\'espera màxim del servidor, haureu de tornar a intentar-ho per parts.';
+$lang['revstop'] = 'El procés de reversió ha acabat amb èxit.';
+$lang['note1'] = 'Nota: aquesta cerca distingeix entre majúscules i minúscules.';
+$lang['note2'] = 'Nota: la pàgina es revertirà a la darrera versió que no contingui el terme brossa especificat <em>%s</em>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/cs/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/cs/intro.txt
new file mode 100644
index 000000000..bbc0df25a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/cs/intro.txt
@@ -0,0 +1,3 @@
+====== Obnova zaspamovaných stránek ======
+
+Tato stránka pomůže pÅ™i automatické obnovÄ› po spamovém útoku. Pro nalezení seznamu zaspamovaných stránek nedřív zadejte hledaný výraz (napÅ™. spamové URL) a pak potvrÄte, že nalezené stránky opravdu obsahují spam a mohou být obnoveny.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/cs/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/cs/lang.php
new file mode 100644
index 000000000..cdfe0e96c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/cs/lang.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Czech language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Bohumir Zamecnik <bohumir@zamecnik.org>
+ * @author Zbynek Krivka <zbynek.krivka@seznam.cz>
+ * @author tomas@valenta.cz
+ */
+$lang['menu'] = 'Obnova zaspamovaných stránek';
+$lang['filter'] = 'Hledat zaspamované stránky';
+$lang['revert'] = 'Obnovit vybrané stránky';
+$lang['reverted'] = '%s vrácena do verze %s';
+$lang['removed'] = '%s odstraněna';
+$lang['revstart'] = 'Obnova stránek zaÄala. Tento proces může trvat dlouho. Pokud
+skriptu vyprší Äas, budete muset obnovovat po menších blocích
+stránek.';
+$lang['revstop'] = 'Proces obnovy stránek byl úspěšnÄ› dokonÄen.';
+$lang['note1'] = 'Poznámka: toto vyhledávání je citlivé na velikost písmen';
+$lang['note2'] = 'Poznámka: tato stránka bude obnovena na poslední verze, která
+neobsahovala dané spamové slovo <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/da/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/da/intro.txt
new file mode 100644
index 000000000..fdb0c5f32
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/da/intro.txt
@@ -0,0 +1,3 @@
+===== Gendannelsesstyring =====
+
+Denne side hjælper dig med at gendanne sider efter et angreb af uønskede indlæg. For at finde en liste af sider, der muligvis er blevet ændret, så skriv en søgestreng (for eksempel. en uønsket netadresse) og bekræft, at de fundne sider virkeligt er uønskede og gendan ændringerne. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/da/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/da/lang.php
new file mode 100644
index 000000000..97e15f361
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/da/lang.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Danish language file
+ *
+ * @author Kalle Sommer Nielsen <kalle@php.net>
+ * @author Esben Laursen <hyber@hyber.dk>
+ * @author Harith <haj@berlingske.dk>
+ * @author Daniel Ejsing-Duun <dokuwiki@zilvador.dk>
+ * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
+ */
+$lang['menu'] = 'Gendannelsesstyring';
+$lang['filter'] = 'Søg efter uønskede sider';
+$lang['revert'] = 'Gendan valgte sider';
+$lang['reverted'] = '%s gendannet til ændring %s';
+$lang['removed'] = '%s fjernet';
+$lang['revstart'] = 'Gendannelsesforløbet er startet. Dette kan tage et stykke tid. Hvis kodefilen giver "time out" før processen færdiggøres, skal du gendanne i mindre dele.';
+$lang['revstop'] = 'Gendannelsesforløbet fuldført uden fejl';
+$lang['note1'] = 'Bemærk: Der er forskel på store og små bogstaver i søgningen';
+$lang['note2'] = 'Bemærk: Denne side vil blive gendannet til den seneste udgave, der ikke indeholder det givne uønskede udtryk <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de-informal/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de-informal/lang.php
new file mode 100644
index 000000000..fd6e81c8a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de-informal/lang.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * German (informal) language file
+ *
+ * @author Alexander Fischer <tbanus@os-forge.net>
+ * @author Juergen Schwarzer <jschwarzer@freenet.de>
+ */
+$lang['menu'] = 'Zurückstellungsmanager';
+$lang['revert'] = 'Stelle ausgewählte Seiten zurück.';
+$lang['removed'] = '%s entfernt';
+$lang['revstart'] = 'Zurückstellungsprozess gestartet. Dies kann eine längere Zeit dauern. Wenn das Skript vor Fertigstellung stopt, sollten Sie es in kleineren Stücken versuchen.';
+$lang['revstop'] = 'Zurückstellungsprozess erfolgreich beendet.';
+$lang['note1'] = 'Beachte: Diese Suche berücksichtigt Gross- und Kleinschreibung';
+$lang['note2'] = 'Beachte: Diese Seite wid zurückgestellt auf die letzte Version, die nicht den Spam-Ausdruck <i>%s</i> enthält.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de/intro.txt
new file mode 100644
index 000000000..d5a092155
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de/intro.txt
@@ -0,0 +1,3 @@
+====== Seiten wieder herstellen ======
+
+Dieses Plugin dient der automatischen Wiederherstellung von Seiten nach einem Spam-Angriff. Geben Sie zunächst einen Suchbegriff (z.B. eine Spam URL) ein um eine Liste betroffener Seiten zu erhalten. Nachdem Sie sich vergewissert haben, dass die gefundenen Seiten wirklich Spam enthalten, können Sie die Seiten wieder herstellen.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de/lang.php
new file mode 100644
index 000000000..d26413ac1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de/lang.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * Germanlanguage file
+ *
+ * @author Michael Klier <chi@chimeric.de>
+ * @author Leo Moll <leo@yeasoft.com>
+ * @author Florian Anderiasch <fa@art-core.org>
+ * @author Robin Kluth <commi1993@gmail.com>
+ * @author Arne Pelka <mail@arnepelka.de>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Dirk Einecke <dirk@dirkeinecke.de>
+ * @author Blitzi94@gmx.de
+ * @author Robert Bogenschneider <robog@GMX.de>
+ */
+$lang['menu'] = 'Seiten wieder herstellen';
+$lang['filter'] = 'Nach betroffenen Seiten suchen';
+$lang['revert'] = 'Ausgewählte Seiten wieder herstellen';
+$lang['reverted'] = '%s wieder hergestellt zu Version %s';
+$lang['removed'] = '%s entfernt';
+$lang['revstart'] = 'Wiederherstellung gestartet. Dies kann einige Zeit dauern. Wenn das Script abbricht, bevor alle Seiten wieder hergestellt wurden, reduzieren Sie die Anzahl der Seiten und wiederholen Sie den Vorgang.';
+$lang['revstop'] = 'Wiederherstellung erfolgreich abgeschlossen.';
+$lang['note1'] = 'Anmerkung: diese Suche unterscheidet Groß- und Kleinschreibung';
+$lang['note2'] = 'Anmerkung: die Seite wird zur letzten Version, die nicht den angegebenen Spam Begriff <i>%s</i> enthält, wieder hergestellt.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/el/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/el/intro.txt
new file mode 100644
index 000000000..9b583bc6b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/el/intro.txt
@@ -0,0 +1,3 @@
+====== Αποκατάσταση κακόβουλων αλλαγών σελίδων ======
+
+Αυτή η σελίδα σας βοηθά να αποκαταστήσετε αυτόματα τις κακόβουλες αλλαγές σελίδων που Ï€ÏοκαλοÏν οι επιθέσεις spam. Για να βÏείτε τις σελίδες που Ï€Ïέπει να Ï„ÏοποποιηθοÏν, Ï€Ïώτα δώστε έναν ÏŒÏο αναζήτησης (Ï€.χ. έναν σÏνδεσμο spam) και έπειτα επιβεβαιώστε ότι οι σελίδες που θα βÏεθοÏν όντως πεÏιέχουν spam και Ï€ÏοχωÏήστε στην αποκατάστασή τους.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/el/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/el/lang.php
new file mode 100644
index 000000000..7b6fde803
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/el/lang.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Greek language file
+ *
+ * Based on DokuWiki Version rc2007-05-24 english language file
+ * Original english language file contents included for reference
+ *
+ * @author Thanos Massias <tm@thriasio.gr>
+ * @author Αθανάσιος Îταής <homunculus@wana.gr>
+ * @author Konstantinos Koryllos <koryllos@gmail.com>
+ */
+$lang['menu'] = 'Αποκατάσταση κακόβουλων αλλαγών σελίδων';
+$lang['filter'] = 'Αναζήτηση σελίδων που πεÏιέχουν spam';
+$lang['revert'] = 'ΕπαναφοÏά παλαιότεÏων εκδόσεων των επιλεγμένων σελίδων';
+$lang['reverted'] = 'Η σελίδα %s επεναφέÏθηκε στην έκδοση %s';
+$lang['removed'] = 'Η σελίδα %s διαγÏάφηκε';
+$lang['revstart'] = 'Η διαδικασία αποκατάστασης άÏχισε. Αυτό ίσως πάÏει αÏκετό χÏόνο. Εάν η εφαÏμογή υπεÏβεί το διαθέσιμο χÏονικό ÏŒÏιο και τεÏματιστεί Ï€Ïιν τελειώσει, θα χÏειαστεί να επαναλάβετε αυτή τη διαδικασία για μικÏότεÏα τμήματα.';
+$lang['revstop'] = 'Η διαδικασία αποκατάστασης ολοκληÏώθηκε με επιτυχία.';
+$lang['note1'] = '<br />Σημείωση: η αναζήτηση επηÏεάζεται από το εάν οι χαÏακτήÏες είναι πεζοί ή κεφαλαίοι';
+$lang['note2'] = '<br />Σημείωση: η σελίδα θα επαναφεÏθεί στην πλέον Ï€Ïόσφατη έκδοση που δεν πεÏιέχει τον ÏŒÏο <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/en/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/en/intro.txt
new file mode 100644
index 000000000..b8f355854
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/en/intro.txt
@@ -0,0 +1,3 @@
+====== Revert Manager ======
+
+This page helps you with the automatic reversion of a spam attack. To find a list of spammy pages first enter a search string (eg. a spam URL), then confirm that the found pages are really spam and revert the edits.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/en/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/en/lang.php
new file mode 100644
index 000000000..a2002f1a7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/en/lang.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * english language file
+ */
+
+// for admin plugins, the menu prompt to be displayed in the admin menu
+// if set here, the plugin doesn't need to override the getMenuText() method
+$lang['menu'] = 'Revert Manager';
+
+// custom language strings for the plugin
+
+$lang['filter'] = 'Search spammy pages';
+$lang['revert'] = 'Revert selected pages';
+$lang['reverted'] = '%s reverted to revision %s';
+$lang['removed'] = '%s removed';
+$lang['revstart'] = 'Reversion process started. This can take a long time. If the
+ script times out before finishing, you need to revert in smaller
+ chunks.';
+$lang['revstop'] = 'Reversion process finished successfully.';
+$lang['note1'] = 'Note: this search is case sensitive';
+$lang['note2'] = 'Note: the page will be reverted to the last version not containing the given spam term <i>%s</i>.';
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eo/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eo/intro.txt
new file mode 100644
index 000000000..14e831467
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eo/intro.txt
@@ -0,0 +1,3 @@
+====== Administro de Restarigo ======
+
+Tiu ĉi paÄo helpas vin pri aÅ­tomata restarigo el spama atako. Por trovi liston de spamecaj paÄoj, unue mendu serĉan liter-ĉenon (ekz. spama URL), do konfirmu, ke la trovitaj paÄoj fakte estas spamaj kaj restarigu la antaÅ­ajn versiojn bonajn.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eo/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eo/lang.php
new file mode 100644
index 000000000..7ed2a4777
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eo/lang.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Esperantolanguage file
+ *
+ * @author Felipe Castro <fefcas@uol.com.br>
+ * @author Felipe Castro <fefcas@gmail.com>
+ * @author Felipe Castro <fefcas (cxe) gmail (punkto) com>
+ * @author Felipo Kastro <fefcas@gmail.com>
+ * @author Robert Bogenschneider <robog@gmx.de>
+ * @author Erik Pedersen <erik pedersen@shaw.ca>
+ * @author Erik Pedersen <erik.pedersen@shaw.ca>
+ * @author Robert Bogenschneider <robog@GMX.de>
+ */
+$lang['menu'] = 'Administrado de restarigo';
+$lang['filter'] = 'Serĉi spamecajn paÄojn';
+$lang['revert'] = 'Restarigi la elektitajn paÄojn';
+$lang['reverted'] = '%s estas restarigita al revizio %s';
+$lang['removed'] = '%s estas forigita';
+$lang['revstart'] = 'Restariga procezo estas ekigita. Tio povas daÅ­ri longan tempon. Se la skripto tro prokrastos antaÅ­ plenumo, vi bezonos restarigi po pli etaj blokoj.';
+$lang['revstop'] = 'Restariga procezo plenumiÄis sukcese.';
+$lang['note1'] = 'Rimarko: tiu ĉi serĉo distingas usklecon';
+$lang['note2'] = 'Rimarko: la paÄo restariÄos al la lasta versio ne enhavanta la menditan spaman terminon <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/es/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/es/intro.txt
new file mode 100644
index 000000000..39c5b047d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/es/intro.txt
@@ -0,0 +1,3 @@
+====== Restaurador ======
+
+Esta página te ayuda con la restauración de ataques spam. Para encontrar una lista de páginas con spam introduce una cadena , luego confirma que las páginas encontradas son realmente un spam y restaura la edición. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/es/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/es/lang.php
new file mode 100644
index 000000000..2886528d6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/es/lang.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Spanish language file
+ *
+ * @author Oscar M. Lage <r0sk10@gmail.com>
+ * @author Gabriel Castillo <gch@pumas.ii.unam.mx>
+ * @author oliver@samera.com.py
+ * @author Enrico Nicoletto <liverig@gmail.com>
+ * @author Manuel Meco <manuel.meco@gmail.com>
+ * @author VictorCastelan <victorcastelan@gmail.com>
+ * @author Jordan Mero hack.jord@gmail.com
+ * @author Felipe Martinez <metalmartinez@gmail.com>
+ * @author Javier Aranda <internet@javierav.com>
+ * @author Zerial <fernando@zerial.org>
+ * @author Marvin Ortega <maty1206@maryanlinux.com>
+ * @author Daniel Castro Alvarado <dancas2@gmail.com>
+ * @author Fernando J. Gómez <fjgomez@gmail.com>
+ */
+$lang['menu'] = 'Restaurador';
+$lang['filter'] = 'Buscar páginas con spam';
+$lang['revert'] = 'Restaurar las páginas seleccionadas';
+$lang['reverted'] = '%s ha restaurado la revisión %s';
+$lang['removed'] = '%s borrado';
+$lang['revstart'] = 'El proceso de restaurado ha comenzado. Puede llevar bastante tiempo. Si el script se para antes de acabar, deberías restaurar cadenas más pequeñas.';
+$lang['revstop'] = 'El proceso de restaurado ha finalizado satisfactoriamente.';
+$lang['note1'] = 'Nota: la búsqueda diferencia entre mayúsculas y minúsculas.';
+$lang['note2'] = 'Nota: la página será restaurada a la última versión que no tenga el término de spam dado <em>%s</em>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eu/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eu/intro.txt
new file mode 100644
index 000000000..c5a5a5afa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eu/intro.txt
@@ -0,0 +1,3 @@
+====== Berrezartze Kudeatzailea ======
+
+Orri honek spam eraso baten berrezartze automatikoarekin laguntzen dizu. Spam-a duten orriak bilatzeko, lehenik sartu bilaketa katea (adb. spam URL bat), eta ondoren baieztatu bilatutako orriak benetan spam-a dutela, gero aldaketak berrezartzeko.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eu/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eu/lang.php
new file mode 100644
index 000000000..e94f07b2a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eu/lang.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Basque language file
+ *
+ * @author Inko Illarramendi <inko.i.a@gmail.com>
+ */
+$lang['menu'] = 'Berrezartze Kudeatzailea';
+$lang['filter'] = 'Bilatu spam duten orriak';
+$lang['revert'] = 'Berrezarri aukeratutako orriak';
+$lang['reverted'] = '%s berrezarria %s berrikuspenera';
+$lang['removed'] = '%s ezabatua';
+$lang['revstart'] = 'Berrezartze prozesua hasi da. Honek denbora luzea eraman dezake.
+Script-a denbora mugara iristen bada, zati txikiagotan berrezarri
+beharko duzu. ';
+$lang['revstop'] = 'Berrezartze prozesua arrakastaz bukatu da.';
+$lang['note1'] = 'Oharra: bilaketa honek maiuskulak eta minuskulak bereizten ditu';
+$lang['note2'] = 'Oharra: orria azken bertsiora berrezarriko da, emandako <i>%s</i> spam terminorik ez duelarik.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fa/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fa/intro.txt
new file mode 100644
index 000000000..0ccdb089a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fa/intro.txt
@@ -0,0 +1,3 @@
+====== مدیریت برگشت‌ها ======
+
+این صÙحه، در بازیابی صÙحاتی Ú©Ù‡ به آن‌ها اسپم ارسال شده است Ú©Ù…Ú© می‌رساند. برای مشاهده‌ی صÙحات اسپم شده، ابتدا جستجو کنید، سپس از اسپم شدن صÙحه‌ی مورد نظر اطمینان حاصل کنید Ùˆ تغییرات اعمال شده را برگردانید. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fa/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fa/lang.php
new file mode 100644
index 000000000..02d2aabd2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fa/lang.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Persian language file
+ *
+ * @author behrad eslamifar <behrad_es@yahoo.com)
+ * @author Mohsen Firoozmandan <info@mambolearn.com>
+ * @author omidmr@gmail.com
+ * @author Omid Mottaghi <omidmr@gmail.com>
+ * @author Mohammad Reza Shoaei <shoaei@gmail.com>
+ */
+$lang['menu'] = 'مدیریت برگشت‌ها';
+$lang['filter'] = 'جستجوی صÙحات اسپم شده';
+$lang['revert'] = 'بازگردانی صÙحات انتخاب شده';
+$lang['reverted'] = '%s به نگارش %s بازگردانده شد';
+$lang['removed'] = '%s حذ٠شد';
+$lang['revstart'] = 'در حال بازگرداندن. ممکن است مدتی زمان ببرد. اگر اجرای برنامه، پیش از اتمام به پایان رسید، باید در بخش‌های کوچک‌تری بازگردانی را انجام دهید.';
+$lang['revstop'] = 'بازگرداندن با موÙقیت به پایان رسید.';
+$lang['note1'] = 'توجه: جستجو حساس به حرو٠کوچک و بزرگ است';
+$lang['note2'] = 'توجه: صÙحه به آخرین نسخه‌ای Ú©Ù‡ حاوی اسپم <i>%s</i> نیست بازگردانده خواهد شد.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fi/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fi/intro.txt
new file mode 100644
index 000000000..3b3ce5daa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fi/intro.txt
@@ -0,0 +1,3 @@
+====== Palautuksenhallinta ======
+
+Tämä sivu auttaa sinua automaattisen palautuksenhallinnan kanssa spam hyökkäyksen jälkeen. Löytääksesi listan spammatyistä sivuista anna ensin hakusana (esim. spm URL), sen jälkeen varmista, että löytyneet sivut todella ovat spammia ja palauta sitten sivut.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fi/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fi/lang.php
new file mode 100644
index 000000000..26bc6b76a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fi/lang.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Finnish language file
+ *
+ * @author otto@valjakko.net
+ * @author Otto Vainio <otto@valjakko.net>
+ * @author Teemu Mattila <ghcsystems@gmail.com>
+ */
+$lang['menu'] = 'Palautuksenhallinta';
+$lang['filter'] = 'Etsi spammattyjä sivuja';
+$lang['revert'] = 'Palauta valitut sivut';
+$lang['reverted'] = '%s palautettu versioon %s';
+$lang['removed'] = '%s poistettu';
+$lang['revstart'] = 'Palautusprosessi käynnistetty. Tämä voi viedä pidemmän aikaa. Jos ajo katkeaa aikakatkaisuun ennen loppua, niin sinun pitää palauttaa pienemmissä osissa.';
+$lang['revstop'] = 'Palautusprosessi lopetti onnistuneesti.';
+$lang['note1'] = 'Huomioi: tämä haku on kirjainkoosta riippuva';
+$lang['note2'] = 'Huomioi: tämä sivu palautetaan viimeiseen versioon, jossa ei ole annettua spamtermiä <i>%s</i>';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fr/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fr/intro.txt
new file mode 100644
index 000000000..db61ac9cf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fr/intro.txt
@@ -0,0 +1,3 @@
+====== Gestion des réversions ======
+
+Cette page peut vous aider à restaurer des pages après une attaque de spam. Pour trouver la liste des pages victimes des spammeurs, entrez un motif de recherche (tel qu'une URL de spam), puis confirmez que les pages trouvées contiennent du spam et annulez leurs éditions.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fr/lang.php
new file mode 100644
index 000000000..8d17280d4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fr/lang.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * french language file
+ * @author Delassaux Julien <julien@delassaux.fr>
+ * @author Maurice A. LeBlanc <leblancma@cooptel.qc.ca>
+ * @author Guy Brand <gb@isis.u-strasbg.fr>
+ * @author gb@isis.u-strasbg.fr
+ * @author stephane.gully@gmail.com
+ * @author Guillaume Turri <guillaume.turri@gmail.com>
+ * @author Erik Pedersen <erik.pedersen@shaw.ca>
+ * @author olivier duperray <duperray.olivier@laposte.net>
+ * @author Vincent Feltz <psycho@feltzv.fr>
+ */
+$lang['menu'] = 'Gestionnaire de réversions';
+$lang['filter'] = 'Trouver les pages spammées ';
+$lang['revert'] = 'Annuler les éditions sélectionnées';
+$lang['reverted'] = '%s restauré à la révision %s';
+$lang['removed'] = '%s supprimé';
+$lang['revstart'] = 'Processus de réversion démarré. Ceci peut prendre longtemps. Si le script dépasse le délai avant de terminer, vous devrez restaurer de plus petits groupes de pages.';
+$lang['revstop'] = 'Processus de réversion terminé avec succès.';
+$lang['note1'] = 'Note : cette recherche est insensible à la casse';
+$lang['note2'] = 'Note: cette page sera révisée à la version précédente ne contenant pas le terme spammeur <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/gl/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/gl/intro.txt
new file mode 100644
index 000000000..81e98f1d5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/gl/intro.txt
@@ -0,0 +1,3 @@
+====== Xestor de recuperación ======
+
+Esta páxina axudarao a se recuperar automaticamente dun ataque de spam. Para encontrar unha listaxe de páxinas que conteñan spam, primeiro debe inserir unha cadea de procura (por ex. un URL de spam) e despois confirmar que as páxinas encontradas conteñen realmente spam, antes de reverter as edicións.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/gl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/gl/lang.php
new file mode 100644
index 000000000..33472090d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/gl/lang.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Galicianlanguage file
+ *
+ * @author CiberIrmandade da Fala <infoxeral@ciberirmandade.org>
+ * @author Tagen Ata <localizacion@tagenata.com>
+ * @author Leandro Regueiro <leandro.regueiro@gmail.com>
+ */
+$lang['menu'] = 'Xestor de recuperación';
+$lang['filter'] = 'Procurar páxinas con spam';
+$lang['revert'] = 'Recuperar as páxinas seleccionadas';
+$lang['reverted'] = '%s foi revertida á revisión %s';
+$lang['removed'] = '%s foi eliminada';
+$lang['revstart'] = 'O proceso de recuperación foi iniciado. Isto podería demorar un certo tempo. Se o script falla por ter superado o seu límite de tempo antes de rematar, terá que efectuar a recuperación sobre fragmentos máis pequenos.';
+$lang['revstop'] = 'O proceso de recuperación rematou correctamente.';
+$lang['note1'] = 'Nota: Esta procura distingue entre maiúsculas e minúsculas';
+$lang['note2'] = 'Nota: A páxina será revertida á última versión que non conteña o termo de spam <i>%s</i> indicado.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/he/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/he/intro.txt
new file mode 100644
index 000000000..44b78dfea
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/he/intro.txt
@@ -0,0 +1,3 @@
+====== מנהל השחזור ======
+
+דף ×–×” יסיע בידך לשחזר ב×ופן ×וטומטי ×חרי התקפת ספ××. כדי לקבל ×ת רשימת ×”×“×¤×™× ×¢× ×”×¡×¤×× ×¢×œ×™×š ר×שית מחרוזת לחיפוש (לדוגמה כתובת ספ××) ×חר כך עליך ל×שר ×©×”×“×¤×™× ×©× ×ž×¦×ו ב×מת ×ž×›×™×œ×™× ×¡×¤×× ×•×œ×©×—×–×¨ ×ת העריכות.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/he/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/he/lang.php
new file mode 100644
index 000000000..e09ffeaab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/he/lang.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Hebrew language file
+ *
+ * @author Dotan Kamber <kamberd@yahoo.com>
+ * @author Moshe Kaplan <mokplan@gmail.com>
+ */
+$lang['menu'] = 'מנהל שחזור';
+$lang['filter'] = 'חפש ×“×¤×™× ×¢× ×¡×¤××';
+$lang['revert'] = 'שחזר ×ת ×”×“×¤×™× ×”× ×‘×—×¨×™×';
+$lang['reverted'] = '%s שוחזרו לגרסה %s';
+$lang['removed'] = '%s הוסרו';
+$lang['revstart'] = 'תהליך השחזור החל. התהליך עלול להיות ממושך. ×× ×ª×¡×¨×™×˜ מגיע למגבלת פסק הזמן לפני ×©×”×¡×ª×™×™× ×”×ª×”×œ×™×š ×™×”×™×” צורך לבצע ×ת השחזור ×‘×ž×§×˜×¢×™× ×§×˜× ×™× ×™×•×ª×¨.';
+$lang['revstop'] = 'תהליך השחזור ×”×•×©×œ× ×‘×”×¦×œ×—×”.';
+$lang['note1'] = 'לתשומת לבך: החיפוש ער לגודל ×”×ותיות הלועזיות.';
+$lang['note2'] = 'לתשות לבך: הדף ישוחזר לגרסה ×”×חרונה ש××™× ×” מכילה ×ת מונח הספ×× <i>%s</i>';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hi/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hi/lang.php
new file mode 100644
index 000000000..d8630a281
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hi/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * Hindi language file
+ *
+ * @author Abhinav Tyagi <abhinavtyagi11@gmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hr/lang.php
new file mode 100644
index 000000000..d2094b77b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hr/lang.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * Croatian language file
+ *
+ * @author Branko Rihtman <theney@gmail.com>
+ * @author Dražen Odobašić <dodobasic@gmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hu/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hu/intro.txt
new file mode 100644
index 000000000..e2c2dadd9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hu/intro.txt
@@ -0,0 +1,3 @@
+====== Visszaállítás kezelő ======
+
+Segítséget nyújtunk SPAM támadások utáni automatikus visszaállításhoz. A fertőzött oldalak kereséséhez meg kell adni egy karaktersorozatot (pl. egy SPAM URL-t). A találatok közül kiválasztva a valóban SPAM-et tartalmazó oldakat, visszaállítjuk őket a lehetséges utolsó SPAM mentes állapotra. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hu/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hu/lang.php
new file mode 100644
index 000000000..58f17007d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hu/lang.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Hungarian language file
+ *
+ * @author Sandor TIHANYI <stihanyi+dw@gmail.com>
+ * @author Siaynoq Mage <siaynoqmage@gmail.com>
+ * @author schilling.janos@gmail.com
+ */
+$lang['menu'] = 'Visszaállítás kezelő (anti-SPAM)';
+$lang['filter'] = 'SPAM tartalmú oldalak keresése';
+$lang['revert'] = 'Kiválasztott oldalak visszaállítása';
+$lang['reverted'] = '%s a következő változatra lett visszaállítva: %s';
+$lang['removed'] = '%s törölve';
+$lang['revstart'] = 'A visszaállítási folyamat elindult. Ez hosszú ideig eltarthat. Ha időtúllépés miatt nem tud lefutni, kisebb darabbal kell próbálkozni.';
+$lang['revstop'] = 'A visszaállítási folyamat sikeresen befejeződött.';
+$lang['note1'] = 'Megjegyzés: a keresés kisbetű-nagybetűre érzékeny';
+$lang['note2'] = 'Megjegyzés: Az oldalt az utolsó olyan változatra állítjuk vissza, ami nem tartalmazza a megadott spam kifejezést: <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/id-ni/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/id-ni/lang.php
new file mode 100644
index 000000000..d367340b7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/id-ni/lang.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * idni language file
+ *
+ * @author Harefa <fidelis@harefa.com>
+ * @author Yustinus Waruwu <juswaruwu@gmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/id/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/id/lang.php
new file mode 100644
index 000000000..c3d485930
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/id/lang.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * Indonesian language file
+ *
+ * @author Irwan Butar Butar <irwansah.putra@gmail.com>
+ * @author Yustinus Waruwu <juswaruwu@gmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/is/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/is/lang.php
new file mode 100644
index 000000000..9de404992
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/is/lang.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Icelandic language file
+ *
+ * @author Hrannar Baldursson <hrannar.baldursson@gmail.com>
+ * @author Ólafur Gunnlaugsson <oli@audiotools.com>
+ * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
+ */
+$lang['removed'] = '%s eytt';
+$lang['note1'] = 'Athugaðu að þegar leitað er þá skiftir stafsetur máli, það að segja leitarvélin gerir mun á hástöfum og lágstöfum';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/it/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/it/intro.txt
new file mode 100644
index 000000000..1577af7ec
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/it/intro.txt
@@ -0,0 +1,3 @@
+====== Gestore di ripristini ======
+
+Questa pagina aiuta il controllo automatico degli attacchi spam. Per cercare una lista delle pagine con spam, inserisci innanzitutto una stringa di ricerca (ad esempio l'URL di un sito di spam), quindi conferma che le pagine trovate contengono realmente spam e ripristinale ad una versione precedente.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/it/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/it/lang.php
new file mode 100644
index 000000000..0c2b265de
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/it/lang.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Italian language file
+ *
+ * @author Pietro Battiston toobaz@email.it
+ * @author Diego Pierotto ita.translations@tiscali.it
+ * @author ita.translations@tiscali.it
+ * @author Lorenzo Breda <lbreda@gmail.com>
+ * @author snarchio@alice.it
+ * @author robocap <robocap1@gmail.com>
+ */
+$lang['menu'] = 'Gestore di ripristini';
+$lang['filter'] = 'Cerca pagine con spam';
+$lang['revert'] = 'Ripristina le pagine selezionate';
+$lang['reverted'] = '%s ripristinata alla versione %s';
+$lang['removed'] = '%s rimossa';
+$lang['revstart'] = 'Processo di ripristino avviato. Può essere necessario molto tempo. Se lo script non fa in tempo a finire, sarà necessario ripristinare in blocchi più piccoli.';
+$lang['revstop'] = 'Processo di ripristino finito con successo.';
+$lang['note1'] = 'Nota: questa ricerca distingue le maiuscole';
+$lang['note2'] = 'Nota: la pagina verrà ripristinata all\'ultima versione non contenente la parola di spam data <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ja/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ja/intro.txt
new file mode 100644
index 000000000..995a57fd7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ja/intro.txt
@@ -0,0 +1,3 @@
+====== å¾©å…ƒç®¡ç† ======
+
+ã“ã®ãƒšãƒ¼ã‚¸ã¯ã€ã‚¹ãƒ‘ムã«ã‚ˆã‚Šç·¨é›†ã•ã‚ŒãŸãƒšãƒ¼ã‚¸ã‚’自動的ã«å¾©å…ƒã™ã‚‹ãŸã‚ã®æ©Ÿèƒ½ã‚’管ç†ã—ã¾ã™ã€‚ スパムをå—ã‘ãŸãƒšãƒ¼ã‚¸ã‚’検索ã™ã‚‹ãŸã‚ã€ã‚¹ãƒ‘ムURLãªã©ã®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã‚’入力ã—ã¦ãã ã•ã„。 ãã®å¾Œã€æ¤œç´¢çµæžœã«å«ã¾ã‚Œã¦ã„るページãŒã‚¹ãƒ‘ムã•ã‚Œã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ã‹ã‚‰å¾©å…ƒã‚’è¡Œã„ã¾ã™ã€‚
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ja/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ja/lang.php
new file mode 100644
index 000000000..0cd8c6f9b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ja/lang.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * japanese language file
+ * @author Yuji Takenaka <webmaster@davilin.com>
+ * @author Ikuo Obataya <i.obataya@gmail.com>
+ * @author Daniel Dupriest <kououken@gmail.com>
+ * @author Kazutaka Miyasaka <kazmiya@gmail.com>
+ */
+$lang['menu'] = '復元管ç†';
+$lang['filter'] = 'スパムをå—ã‘ãŸãƒšãƒ¼ã‚¸ã‚’検索';
+$lang['revert'] = 'é¸æŠžã—ãŸãƒšãƒ¼ã‚¸ã‚’検索';
+$lang['reverted'] = '%s ã¯ãƒªãƒ“ジョン %s ã¸å¾©å…ƒã•ã‚Œã¾ã—ãŸ';
+$lang['removed'] = '%s ã¯å‰Šé™¤ã•ã‚Œã¾ã—ãŸ';
+$lang['revstart'] = '復元処ç†ä¸­ã§ã™ã€‚時間ãŒæŽ›ã‹ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ãŒã€ã‚‚ã—タイムアウトã—ãŸå ´åˆã¯ã€å¾©å…ƒã‚’複数回ã«åˆ†ã‘ã¦è¡Œã£ã¦ãã ã•ã„。';
+$lang['revstop'] = '復元処ç†ãŒæ­£ã—ã完了ã—ã¾ã—ãŸã€‚';
+$lang['note1'] = '注æ„:検索語å¥ã¯å¤§æ–‡å­—・å°æ–‡å­—を区別ã—ã¾ã™';
+$lang['note2'] = '注æ„:最新ã®å†…容ã«æ¤œç´¢ã—ãŸã‚¹ãƒ‘ムキーワード <i>%s</i> ãŒå«ã¾ã‚Œã¦ã„ãªã„ページãŒå¾©å…ƒã•ã‚Œã¾ã™ã€‚';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ko/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ko/intro.txt
new file mode 100644
index 000000000..a0164dc4f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ko/intro.txt
@@ -0,0 +1,3 @@
+====== 복구 ê´€ë¦¬ìž ======
+
+스팸 공격으로 부터 ìžë™ìœ¼ë¡œ ë³µêµ¬í•˜ëŠ”ë° ì´íŽ˜ì´ì§€ëŠ” ë„ì›€ì´ ë  ìˆ˜ 있습니다. 스팸 ê³µê²©ë°›ì€ íŽ˜ì´ì§€ 목ë¡ì„ 찾으려면 문ìžì—´ì„ 입력하기 ë°”ëžë‹ˆë‹¤(예. 스팸 URL), ê·¸ 후 ê²€ìƒ‰ëœ íŽ˜ì´ì§€ë“¤ì´ 스팸 공격받았는지 확ì¸í•˜ê³  복구합니다.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ko/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ko/lang.php
new file mode 100644
index 000000000..5e070de92
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ko/lang.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Korean language file
+ *
+ * @author jk lee
+ * @author dongnak@gmail.com
+ * @author Song Younghwan <purluno@gmail.com>
+ * @author SONG Younghwan <purluno@gmail.com>
+ */
+$lang['menu'] = '복구 관리ìž';
+$lang['filter'] = '스팸 페ì´ì§€ 검색 ';
+$lang['revert'] = 'ì„ íƒ íŽ˜ì´ì§€ë“¤ 복구';
+$lang['reverted'] = '%s를 ì´ì „ 버전 %s 으로 복구';
+$lang['removed'] = '%s 삭제';
+$lang['revstart'] = '복구 ìž‘ì—…ì„ ì‹œìž‘í•©ë‹ˆë‹¤. 오랜 ì‹œê°„ì´ ê±¸ë¦´ 수 있습니다. 완료ë˜ê¸° ì „ì— ìŠ¤í¬ë¦½íŠ¸ time outì´ ë°œìƒí•œë‹¤ë©´ ë” ìž‘ì€ ìž‘ì—…ë“¤ë¡œ 나누어서 복구하기 ë°”ëžë‹ˆë‹¤. ';
+$lang['revstop'] = '복구 ìž‘ì—…ì´ ì„±ê³µì ìœ¼ë¡œ ë났습니다.';
+$lang['note1'] = '주ì˜: ëŒ€ì†Œë¬¸ìž êµ¬ë³„í•˜ì—¬ 검색합니다.';
+$lang['note2'] = '주ì˜: ì´ íŽ˜ì´ì§€ëŠ” 스팸 단어 <i>%s</i>를 í¬í•¨í•˜ì§€ ì•Šì€ ê°€ìž¥ 최근 과거 문서 버전으로 복구ë©ë‹ˆë‹¤. ';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lt/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lt/lang.php
new file mode 100644
index 000000000..103485864
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lt/lang.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * Lithuanian language file
+ *
+ * @author audrius.klevas@gmail.com
+ * @author Arunas Vaitekunas <aras@fan.lt>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lv/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lv/intro.txt
new file mode 100644
index 000000000..edcdab2cd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lv/intro.txt
@@ -0,0 +1,3 @@
+====== PiemÄ“sloto lapu atjaunotÄjs ======
+
+Å Ä« lapa palÄ«dzÄ“s automÄtiski atjaunot saturu pÄ“c huligÄnisma . Lai atrastu piedrazotÄs lapas ieraksti meklÄ“jamo izteiksmi (piem. smaperu URL), tad apstiprini, ka atrastÄs ir "mÄ“slapas" un atcel izdarÄ«tÄs izmaiņas .
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lv/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lv/lang.php
new file mode 100644
index 000000000..0101f2698
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lv/lang.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * Latvian, Lettish language file
+ *
+ * @author Aivars Miška <allefm@gmail.com>
+ */
+$lang['menu'] = 'PiemÄ“sloto lapu atjaunotÄjs';
+$lang['filter'] = 'MeklÄ“t piemÄ“slotÄs lapas';
+$lang['revert'] = 'Atjaunot norÄdÄ«tÄs lapas ';
+$lang['reverted'] = '%s atjaunots uz %s stÄvokli';
+$lang['removed'] = '% dzēsts';
+$lang['revstart'] = 'AtjaunoÅ¡ana uzsÄkta. Tas var aizņemt ilgÄku laiku. Ja darbÄ«ba pÄrtrÅ«kst noilguma dēļ, atjaunoÅ¡ana jÄveic pa mazÄkÄm porcijÄm.';
+$lang['revstop'] = 'Atjaunošana veiksmīgi pabeigta. ';
+$lang['note1'] = 'Ievēro: Meklēšana atšķir lielos un mazos burtus.';
+$lang['note2'] = 'IevÄ“ro: Lapu atjaunos ar pÄ“dÄ“jo versiju, kas nesatur uzdoto spama vÄrdu <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/mr/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/mr/intro.txt
new file mode 100644
index 000000000..efca2430d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/mr/intro.txt
@@ -0,0 +1,5 @@
+====== फेरबदल वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤• ======
+
+हà¥à¤¯à¤¾ पानादà¥à¤µà¤¾à¤°à¥‡ तà¥à¤®à¥à¤¹à¥€ भंकस हलà¥à¤²à¥à¤¯à¤¾à¤¦à¥à¤µà¤¾à¤°à¥‡ à¤à¤¾à¤²à¥‡à¤²à¥‡ बदल आपोआप फेरबदल करू शकता.
+भंकस पानांची यादी बनवणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ पà¥à¤°à¤¥à¤® à¤à¤–ादा शबà¥à¤¦à¤¸à¤®à¥‚ह टाका ( उदा. à¤à¤–ादं भंकस URL ),
+मग जी पाने सापडतील टी भंकस असलà¥à¤¯à¤¾à¤šà¥‡ नकà¥à¤•à¥€ करा आणि तà¥à¤¯à¤¾à¤¤à¥€à¤² बदल रदà¥à¤¦ करा. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/mr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/mr/lang.php
new file mode 100644
index 000000000..3912bb967
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/mr/lang.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Marathi language file
+ *
+ * @author ghatothkach@hotmail.com
+ * @author Padmanabh Kulkarni <kulkarnipadmanabh@gmail.com>
+ * @author Padmanabh Kulkarni<kulkarnipadmanabh@gmail.com>
+ * @author shantanoo@gmail.com
+ */
+$lang['menu'] = 'फेर बदल वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•';
+$lang['filter'] = 'भंकस पाने शोधा';
+$lang['revert'] = 'निवडलेली पानातील बदल रदà¥à¤¦ करा';
+$lang['reverted'] = '%s फेरबदलून %s आवृतà¥à¤¤à¤¿à¤®à¤§à¥‡ आणला आहे';
+$lang['removed'] = '%s काढला आहे.';
+$lang['revstart'] = 'फेरबदलाची पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ चालॠà¤à¤¾à¤²à¥€ आहे.याला बराच वेळ लागू शकतो. जर सà¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ समà¥à¤ªà¤£à¥à¤¯à¤¾à¤†à¤§à¤¿ तà¥à¤¯à¤¾à¤šà¥€ कालमरà¥à¤¯à¤¾à¤¦à¤¾ उलटून गेली तर छोटà¥à¤¯à¤¾-छोटà¥à¤¯à¤¾ तà¥à¤•à¤¡à¥à¤¯à¤¾à¤‚मधे फेरबदल करा.';
+$lang['revstop'] = 'फेरबदलाची पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ यशसà¥à¤µà¥€à¤°à¥€à¤¤à¥à¤¯à¤¾ पूरà¥à¤£ à¤à¤¾à¤²à¥€.';
+$lang['note1'] = 'टीप : हा शोध केस-सेंसिटिव आहे ( फ़कà¥à¤¤ इंगà¥à¤°à¤œà¥€à¤¸à¤¾à¤ à¥€ लागू )';
+$lang['note2'] = 'टीप : हे पान फेरबदल करून जà¥à¤¯à¤¾ शेवटचà¥à¤¯à¤¾ आवृतà¥à¤¤à¤¿à¤®à¤§à¥‡ <i>%s</i> हा दिलेला भंकस शबà¥à¤¦ नाही तà¥à¤¯à¤¾à¤¤ बदलले जाईल.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ne/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ne/lang.php
new file mode 100644
index 000000000..4fd337532
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ne/lang.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Nepali language file
+ *
+ * @author Saroj Kumar Dhakal <lotusnagarkot@gmail.com>
+ * @author SarojKumar Dhakal <lotusnagarkot@yahoo.com>
+ * @author Saroj Dhakal<lotusnagarkot@yahoo.com>
+ */
+$lang['menu'] = 'पूरà¥à¤µà¤¸à¥à¤¥à¤¿à¤¤à¥€ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•';
+$lang['filter'] = 'सà¥à¤ªà¥à¤¯à¤¾à¤®à¤¯à¥à¤•à¥à¤¤ पृषà¥à¤ à¤¹à¤°à¥ खोजà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['revert'] = 'छानिà¤à¤• पृषà¥à¤ à¤¹à¤°à¥à¤²à¤¾à¤ˆ पूरà¥à¤µà¤¸à¥à¤¥à¤¿à¤¤à¤¿à¤®à¤¾ फरà¥à¤•à¤¾à¤‰à¤¨à¥à¤¹à¥‹à¤¸à¥ ।';
+$lang['reverted'] = '%s लाई %s संसà¥à¤•à¤°à¤£à¤®à¤¾ फरà¥à¤•à¤¾à¤‡à¤¯à¥‹ ।';
+$lang['removed'] = '%s लाई हटाइयो ।';
+$lang['revstart'] = 'पूरà¥à¤µà¤¸à¥à¤¥à¤¿à¤¤à¤¿à¤®à¤¾ फरà¥à¤•à¤¾à¤‰à¤¨à¥‡ कारà¥à¤¯ सà¥à¤°à¥ भयो । यसले लामो समय लिन सकà¥à¤›à¥¤ यदि सà¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿà¤•à¥‹ समय काà¥à¤°à¥à¤¯ सकिनॠपूरà¥à¤µ सकियो भने । तपाईले सानो सानो टà¥à¤•à¥à¤°à¤¾ लिà¤à¤° पà¥à¤°à¥à¤µà¤°à¥à¤ªà¤®à¤¾ फरà¥à¤•à¤¾à¤‰à¤¨à¥ परà¥à¤¨à¥‡ हà¥à¤¨à¥à¤› ।';
+$lang['revstop'] = 'पूरà¥à¤µà¤¸à¥à¤¥à¤¿à¤¤à¤¿à¤®à¤¾ फरà¥à¤•à¤¾à¤‰à¤¨à¥‡ कारà¥à¤¯ सफलतापूरà¥à¤µà¤• सकियो ।';
+$lang['note1'] = 'नोट: यो खोज वरà¥à¤£ समà¥à¤µà¥‡à¤¦à¤¨à¤¶à¥€à¤² छ';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/nl/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/nl/intro.txt
new file mode 100644
index 000000000..db8f5a06c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/nl/intro.txt
@@ -0,0 +1,3 @@
+===== Herstelmanager =====
+
+Deze pagina helpt u bij het herstellen van pagina's na een spam-aanval. Vul een zoekterm in (bijvoorbeeld een spam url) om een lijst te krijgen van bekladde pagina's, bevestig dat de pagina's inderdaad spam bevatten en herstel de wijzigingen.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/nl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/nl/lang.php
new file mode 100644
index 000000000..3b5c4e0fe
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/nl/lang.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Dutch language file
+ *
+ * @author Wouter Schoot <wouter@schoot.org>
+ * @author John de Graaff <john@de-graaff.net>
+ * @author Niels Schoot <niels.schoot@quintiq.com>
+ * @author Dion Nicolaas <dion@nicolaas.net>
+ * @author Danny Rotsaert <danny.rotsaert@edpnet.be>
+ * @author Marijn Hofstra hofstra.m@gmail.com
+ * @author Matthias Carchon webmaster@c-mattic.be
+ */
+$lang['menu'] = 'Herstelmanager';
+$lang['filter'] = 'Zoek naar bekladde pagina\'s';
+$lang['revert'] = 'Herstel geselecteerde pagina\'s';
+$lang['reverted'] = '%s hersteld naar revisie %s';
+$lang['removed'] = '%s verwijderd';
+$lang['revstart'] = 'Herstelproces begonnen. Dit kan een lange tijd duren. Als het script een timeout genereerd voor het klaar is, moet je in kleinere selecties herstellen.';
+$lang['revstop'] = 'Herstelproces succesvol afgerond.';
+$lang['note1'] = 'NB: deze zoekopdracht is hoofdlettergevoelig';
+$lang['note2'] = 'NB: de pagina zal hersteld worden naar de laatste versie waar de opgegeven spam-term <i>%s</i> niet op voorkomt.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/no/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/no/intro.txt
new file mode 100644
index 000000000..f48b98749
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/no/intro.txt
@@ -0,0 +1,3 @@
+====== Tilbakestillingsbehandler ======
+
+Denne siden hjelper deg å automatisk reversere forsøpling av sidene. For å finne en liste over forsøplede sider, skriv inn en søkestreng (f.eks. en søppel-URL). Bekreft deretter at de funnede sidene virkelig er forsøplet og tilbakestill endringene.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/no/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/no/lang.php
new file mode 100644
index 000000000..262ea3fe5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/no/lang.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Norwegianlanguage file
+ *
+ * @author Thomas Nygreen <nygreen@gmail.com>
+ * @author Arild Burud <arildb@met.no>
+ * @author Torkill Bruland <torkar-b@online.no>
+ * @author Rune M. Andersen <rune.andersen@gmail.com>
+ * @author Jakob Vad Nielsen (me@jakobnielsen.net)
+ * @author Kjell Tore Næsgaard <kjell.t.nasgaard@ntnu.no>
+ * @author Knut Staring <knutst@gmail.com>
+ * @author Lisa Ditlefsen <lisa@vervesearch.com>
+ * @author Erik Pedersen <erik.pedersen@shaw.ca>
+ * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
+ */
+$lang['menu'] = 'Tilbakestillingsbehandler';
+$lang['filter'] = 'Søk etter søppelmeldinger';
+$lang['revert'] = 'Tilbakestill valgte sider';
+$lang['reverted'] = '%s tilbakestilt til revisjon %s';
+$lang['removed'] = '%s fjernet';
+$lang['revstart'] = 'Prosessen med tilbakestilling er startet. Hvis det skjer et
+tidsavbrudd før prosessen er ferdig, må du tilbakestille
+færre sider om gangen.';
+$lang['revstop'] = 'Tilbakestillingen er fullført.';
+$lang['note1'] = 'Merk: søket skiller mellom store og små bokstaver';
+$lang['note2'] = 'Merk: siden vil bli tilbakestilt til den siste versjonen som ikke inneholder det oppgitte søppel-ordet <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pl/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pl/intro.txt
new file mode 100644
index 000000000..410948a2f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pl/intro.txt
@@ -0,0 +1,3 @@
+====== Menadżer przywracania ======
+
+Menadżer przywracania przeznaczony jest do automatycznego naprawiania stron, które uległy wandalizmom. W celu naprawienia uszkodzonych stron, wyszukaj je a następnie oznacz i przywróć poprzednie wersje.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pl/lang.php
new file mode 100644
index 000000000..8ad68b5f8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pl/lang.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * polish language file
+ * @author Grzegorz Żur <grzegorz.zur@gmail.com>
+ * @author Mariusz Kujawski <marinespl@gmail.com>
+ * @author Maciej Kurczewski <pipijajko@gmail.com>
+ * @author SÅ‚awomir Boczek <slawkens@gmail.com>
+ */
+$lang['menu'] = 'Menadżer przywracania';
+$lang['filter'] = 'Wyszukaj uszkodzone strony';
+$lang['revert'] = 'Napraw zaznaczone strony';
+$lang['reverted'] = 'StronÄ™ %s zastÄ…piono wersjÄ… %s';
+$lang['removed'] = 'Stronę %s usunięto';
+$lang['revstart'] = 'Naprawa rozpoczęta. To może zająć kilka minut. Jeśli strona przestanie się ładować, spróbuj ponownie zaznaczając mniejszą liczbę stron.';
+$lang['revstop'] = 'Naprawa zakończona pomyślnie!';
+$lang['note1'] = 'Uwaga: duże i małe litery są rozróżniane';
+$lang['note2'] = 'Uwaga: zostanie przywrócona ostatnia wersja strony niezawierająca wyrażenia <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/intro.txt
new file mode 100644
index 000000000..5ce9890db
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/intro.txt
@@ -0,0 +1,3 @@
+====== Gerenciador de Reversões ======
+
+Essa página ajuda a reverter automaticamente um ataque de spam. Para encontrar as páginas que sofreram ataque, primeiro entre com um termo na busca (ex.: a URL do spam), então confirme que as páginas encontradas são realmente spam e reverta as edições.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/lang.php
new file mode 100644
index 000000000..93c8bf4e1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/lang.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Portuguese language file
+ *
+ * @author Frederico Gonçalves Guimarães <frederico@teia.bio.br>
+ * @author Felipe Castro <fefcas@gmail.com>
+ * @author Lucien Raven <lucienraven@yahoo.com.br>
+ * @author Enrico Nicoletto <liverig@gmail.com>
+ * @author Flávio Veras <flaviove@gmail.com>
+ * @author Jeferson Propheta <jeferson.propheta@gmail.com>
+ * @author jair.henrique@gmail.com
+ * @author Luis Dantas <luis@dantas.com>
+ * @author Frederico Guimarães <frederico@teia.bio.br>
+ * @author Jair Henrique <jair.henrique@gmail.com>
+ * @author Luis Dantas <luisdantas@gmail.com>
+ */
+$lang['menu'] = 'Gerenciador de reversões';
+$lang['filter'] = 'Procura por páginas com spam';
+$lang['revert'] = 'Reverte as páginas selecionadas';
+$lang['reverted'] = '%s revertida para a revisão %s';
+$lang['removed'] = '% removida';
+$lang['revstart'] = 'O processo de reversão foi iniciado. Isso pode levar muito tempo. Se o tempo de execução do script expirar antes dele encerrar, você deverá tentar novamente usando blocos menores.';
+$lang['revstop'] = 'O processo de reversão terminou com sucesso.';
+$lang['note1'] = 'Nota: esta busca diferencia maiúsculas/minúsculas';
+$lang['note2'] = 'Nota: a página será revertida para a última versão que não contém o termo de spam <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt/intro.txt
new file mode 100644
index 000000000..7adfe5f21
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt/intro.txt
@@ -0,0 +1,3 @@
+====== Gerir Reversões ======
+
+Esta página ajuda a reverter automaticamente de um ataque spam. Para encontrar as páginas afectadas insira primeiro um texto de pesquisa (i.e spam URL), confirme as páginas encontradas como sendo resultantes de um ataque spam e reverta essas edições. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt/lang.php
new file mode 100644
index 000000000..4ad114efe
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt/lang.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Portuguese language file
+ *
+ * @author José Monteiro <Jose.Monteiro@DoWeDo-IT.com>
+ * @author Enrico Nicoletto <liverig@gmail.com>
+ * @author Fil <fil@meteopt.com>
+ * @author André Neves <drakferion@gmail.com>
+ */
+$lang['menu'] = 'Gestor de Reversões';
+$lang['filter'] = 'Pesquisar por páginas "spammy"';
+$lang['revert'] = 'Reverter páginas seleccionadas';
+$lang['reverted'] = '%s revertida para revisão %s';
+$lang['removed'] = '%s removidas.';
+$lang['revstart'] = 'Processo de reversão iniciado. A sua execução pode demorar. Se der timeout antes de terminar então é preciso escolher quantidades menores de páginas a reverter.';
+$lang['revstop'] = 'Processo de reversão bem sucedido.';
+$lang['note1'] = 'Nota: a pesquisa é case-sensitive';
+$lang['note2'] = 'Nota: a página será revertida para a versão anterior que não contém os termos spam pesquisados: <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ro/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ro/intro.txt
new file mode 100644
index 000000000..3a030359b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ro/intro.txt
@@ -0,0 +1,3 @@
+====== Manager Reveniri ======
+
+Această pagină ajută revenirea automată în cazul unui atac spam. Pentru a găsi o listă a paginilor cu spam, întroduceţi mai întâi un şir de căutat (de ex. Un URL spam), apoi confirmaţi dacă paginile găsite conţin într-adevăr spam şi anulaţi editările.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ro/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ro/lang.php
new file mode 100644
index 000000000..6e534fd37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ro/lang.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Romanian language file
+ *
+ * @author Sergiu Baltariu <s_baltariu@yahoo.com>
+ * @author s_baltariu@yahoo.com
+ * @author Emanuel-Emeric Andrasi <n30@mandrivausers.ro>
+ * @author Emanuel-Emeric Andrași <n30@mandrivausers.ro>
+ * @author Emanuel-Emeric AndraÅŸi <em.andrasi@mandrivausers.ro>
+ * @author Emanuel-Emeric Andrasi <em.andrasi@mandrivausers.ro>
+ */
+$lang['menu'] = 'Manager Reveniri';
+$lang['filter'] = 'Caută pagini cu posibil spam';
+$lang['revert'] = 'Revenire pentru paginile selectate';
+$lang['reverted'] = '%s revenită la versiunea %s';
+$lang['removed'] = '%s eliminată';
+$lang['revstart'] = 'Procesul de revenire a început. Acesta poate dura mult timp.Dacă scriptul expiră înainte de finalizare, trebuie să reveniţi în paşi mai mici.';
+$lang['revstop'] = 'Procesul de revenire s-a finalizat cu succes.';
+$lang['note1'] = 'Notă: această căutare este sensibilă la majuscule.';
+$lang['note2'] = 'Notă: pagina va reveni la ultima versiune ce nu conţine termenul de spam <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ru/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ru/intro.txt
new file mode 100644
index 000000000..6f08c9961
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ru/intro.txt
@@ -0,0 +1,3 @@
+====== Менеджер откаток ======
+
+Эта Ñтраница поможет вам в автоматичеÑкой откатке изменений поÑле Ñпам-атаки. Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы найти Ñпам-Ñтраницы, введите ключевые Ñлова и произведите поиÑк (например, по URL Ñпаммера). Затем убедитеÑÑŒ, что найденные Ñтраницы дейÑтвительно Ñодержат Ñпам, и Ñделайте откатку изменений.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ru/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ru/lang.php
new file mode 100644
index 000000000..a78210777
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ru/lang.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * russian language file
+ * @author Denis Simakov <akinoame1@gmail.com>
+ * @author Andrew Pleshakov <beotiger@mail.ru>
+ * @author Змей ЭтерийÑкий evil_snake@eternion.ru
+ * @author Hikaru Nakajima <jisatsu@mail.ru>
+ * @author Alexei Tereschenko <alexeitlex@yahoo.com>
+ * @author Irina Ponomareva irinaponomareva@webperfectionist.com
+ * @author Alexander Sorkin <kibizoid@gmail.com>
+ * @author Kirill Krasnov <krasnovforum@gmail.com>
+ * @author Vlad Tsybenko <vlad.development@gmail.com>
+ */
+$lang['menu'] = 'Менеджер откаток';
+$lang['filter'] = 'ПоиÑк Ñпам-Ñтраниц';
+$lang['revert'] = 'Откатить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ñ… Ñтраниц';
+$lang['reverted'] = '%s откачена к верÑии %s';
+$lang['removed'] = '%s удалена';
+$lang['revstart'] = 'Ðачат процеÑÑ Ð¾Ñ‚ÐºÐ°Ñ‚ÐºÐ¸. Он может занÑÑ‚ÑŒ много времени. ЕÑли Ñкрипт не уÑпевает завершить работу и выдает ошибку, необходимо произвеÑти откатку более маленькими чаÑÑ‚Ñми.';
+$lang['revstop'] = 'ПроцеÑÑ Ð¾Ñ‚ÐºÐ°Ñ‚ÐºÐ¸ уÑпешно завершен.';
+$lang['note1'] = 'Замечание: поиÑк Ñ ÑƒÑ‡ÐµÑ‚Ð¾Ð¼ региÑтра';
+$lang['note2'] = 'Замечание: Ñтраница будет откачена к поÑледней верÑии, не Ñодержащей Ñпам-термин <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sk/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sk/intro.txt
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sk/intro.txt
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sk/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sk/lang.php
new file mode 100644
index 000000000..822837de0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sk/lang.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Slovaklanguage file
+ *
+ * @author Michal Mesko <michal.mesko@gmail.com>
+ * @author exusik@gmail.com
+ * @author Martin Michalek <michalek.dev@gmail.com>
+ */
+$lang['menu'] = 'Reverzný menežér';
+$lang['filter'] = 'Hľadať spamerské stránky';
+$lang['revert'] = 'Vrátiť vybrané stránky';
+$lang['reverted'] = '%s vrátená na revíziu %s';
+$lang['removed'] = '%s odstránená';
+$lang['revstart'] = 'Proces reverzie bol spustený. Toto môže trvaÅ¥ dlhý Äas. Ak skript vyprší pred tým, ako skonÄí, musíte urobiÅ¥ reverziu v menších dávkach.';
+$lang['revstop'] = 'Proces reverzie sa úspeÅ¡ne skonÄil.';
+$lang['note1'] = 'Poznámka: vyhľadávanie rozlišuje medzi veľkými a malými písmenami';
+$lang['note2'] = 'Poznámka: táto stránka bude vrátená do poslednej verzie, ktorá neobsahuje spamový výraz <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sl/lang.php
new file mode 100644
index 000000000..1fcf4ca36
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sl/lang.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * Slovenian language file
+ *
+ * @author Dejan Levec <webphp@gmail.com>
+ * @author BoÅ¡tjan SeniÄar <senicar@gmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sr/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sr/intro.txt
new file mode 100644
index 000000000..8c288e7f1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sr/intro.txt
@@ -0,0 +1,3 @@
+====== Управљач за враћање ======
+
+Ова Ñтрана вам помаже од напада Ñпама аутоматÑким враћањем на Ñтаре верзије Ñтраница. Да биÑте пронашли Ñпамоване Ñтранице откуцајте реч за претрагу (тј. реч која Ñе појављује у Ñпаму), затим потврдите да Ñе на пронађеним Ñтраницама Ñтварно налази Ñпам и онда вратите на Ñтање пре промена. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sr/lang.php
new file mode 100644
index 000000000..3b28a1729
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sr/lang.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Serbian language file
+ *
+ * @author Иван Петровић petrovicivan@ubuntusrbija.org
+ * @author Ivan Petrovic <petrovicivan@ubuntusrbija.org>
+ */
+$lang['menu'] = 'Управљач за враћање';
+$lang['filter'] = 'Претрага Ñпам Ñтраница';
+$lang['revert'] = 'Врати одабране Ñтранице';
+$lang['reverted'] = '%s враћена на ревизију %s';
+$lang['removed'] = '%s је уклоњена';
+$lang['revstart'] = 'ÐŸÑ€Ð¾Ñ†ÐµÑ Ð²Ñ€Ð°Ñ›Ð°ÑšÐ° је покренут. Може потрајати дуже време. Ðко иÑтекне време пре завршетка потребно је да покренете у мањим деловима.';
+$lang['revstop'] = 'ÐŸÑ€Ð¾Ñ†ÐµÑ Ð²Ñ€Ð°Ñ›Ð°ÑšÐ° је уÑпешно завршен.';
+$lang['note1'] = 'Ðапомена: ова претрага разликује велика и мала Ñлова';
+$lang['note2'] = 'Ðапомена: Ñтраница ће бити враћена на поÑледњу верзију која не Ñадржи Ñпам израз <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sv/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sv/intro.txt
new file mode 100644
index 000000000..cd7f322a3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sv/intro.txt
@@ -0,0 +1,3 @@
+====== Hantera återställningar ======
+
+Den här sidan hjälper till med automatiskt återställning efter en spamattack. För att hitta spammade sidor, ange först en söksträng (till exempel en webbadress). Kontrollera sedan att sidorna som hittades verkligen är spam, och återställ sedan redigeringarna.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sv/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sv/lang.php
new file mode 100644
index 000000000..1b6ca3374
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sv/lang.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Swedish language file
+ *
+ * @author Per Foreby <per@foreby.se>
+ * @author Nicklas Henriksson <nicklas[at]nihe.se>
+ * @author HÃ¥kan Sandell <hakan.sandell[at]mydata.se>
+ * @author Dennis Karlsson
+ * @author Tormod Otter Johansson <tormod@latast.se>
+ * @author emil@sys.nu
+ * @author Pontus Bergendahl <pontus.bergendahl@gmail.com>
+ * @author Tormod Johansson tormod.otter.johansson@gmail.com
+ * @author Emil Lind <emil@sys.nu>
+ * @author Bogge Bogge <bogge@bogge.com>
+ * @author Peter Åström <eaustreum@gmail.com>
+ * @author HÃ¥kan Sandell <hakan.sandell@home.se>
+ */
+$lang['menu'] = 'Hantera återställningar';
+$lang['filter'] = 'Sök efter spamsidor';
+$lang['revert'] = 'Återställ markerade redigeringar';
+$lang['reverted'] = '%s återställd till version %s';
+$lang['removed'] = '%s borttagen';
+$lang['revstart'] = 'Återställningen startad. Detta kan ta lång tid. Om
+ skriptet får en timeout innan det är färdigt måste du köra återställningen
+ med färre sidor åt gången.';
+$lang['revstop'] = 'Återställningen avslutades utan problem.';
+$lang['note1'] = 'OBS: sökningen skiljer på stora och små bokstäver';
+$lang['note2'] = 'OBS: sidan kommer att återställas till den senaste versionen som inte innehåller den angivna söksträngen <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/th/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/th/intro.txt
new file mode 100644
index 000000000..2bfd27e59
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/th/intro.txt
@@ -0,0 +1,3 @@
+====== ตัวจัดà¸à¸²à¸£à¸à¸¹à¹‰à¸„ืนสภาพเอà¸à¸ªà¸²à¸£ ======
+
+หน้านี้จะช่วยคุณด้วยà¸à¸²à¸£à¸à¸¹à¹‰à¸„ืนหน้าที่ถูà¸à¹à¸ªà¸›à¸¡à¹‚ดยอัตโนมัติ เพื่อที่จะค้นหารายà¸à¸²à¸£à¸«à¸™à¹‰à¸²à¸—ี่ถูà¸à¸ªà¹à¸›à¸¡ อันดับà¹à¸£à¸à¹ƒà¸«à¹‰à¸à¸£à¸­à¸à¸‚้อความสืบค้น (เช่น URL เว็บโฆษณาที่มาสà¹à¸›à¸¡à¹„ว้), จาà¸à¸™à¸±à¹‰à¸™à¹ƒà¸«à¹‰à¸¢à¸·à¸™à¸¢à¸±à¸™à¸§à¹ˆà¸²à¹€à¸žà¸ˆà¸—ี่พบนั้นถูà¸à¸ªà¹à¸›à¸¡à¸ˆà¸£à¸´à¸‡à¹† à¹à¸¥à¹‰à¸§à¸ˆà¸¶à¸‡à¸ªà¸±à¹ˆà¸‡à¸„ืนสภาพต้นฉบับ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/th/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/th/lang.php
new file mode 100644
index 000000000..86e4f9ca4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/th/lang.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Thai language file
+ *
+ * @author Komgrit Niyomrath <n.komgrit@gmail.com>
+ * @author Kittithat Arnontavilas mrtomyum@gmail.com
+ * @author Arthit Suriyawongkul <arthit@gmail.com>
+ * @author Kittithat Arnontavilas <mrtomyum@gmail.com>
+ * @author Thanasak Sompaisansin <jombthep@gmail.com>
+ */
+$lang['menu'] = 'ตัวจัดà¸à¸²à¸£à¸„ืนสภาพเอà¸à¸ªà¸²à¸£à¸‰à¸šà¸±à¸šà¹€à¸”ิม';
+$lang['filter'] = 'ค้นหาเพจที่ถูà¸à¹à¸ªà¸›à¸¡';
+$lang['revert'] = 'คืนสภาพเพจที่เลือà¸à¹„ว้';
+$lang['reverted'] = 'คืนสภาพ %s à¸à¸¥à¸±à¸šà¹„ปเป็นฉบับ %s';
+$lang['removed'] = 'ถอดทิ้ง %s';
+$lang['revstart'] = 'à¸à¸£à¸°à¸šà¸§à¸™à¸à¸²à¸£à¸„ืนสภาพได้เริ่มต้นà¹à¸¥à¹‰à¸§ นี่อาจต้องใช้เวลานาน ถ้าหมดเวลาที่à¸à¸³à¸«à¸™à¸”สำหรับสคริปต์à¸à¹ˆà¸­à¸™à¸—ี่จะสำเร็จ คุณต้องไปทำà¸à¸²à¸£à¹à¸šà¹ˆà¸‡à¸‚้อมูลให้เล็à¸à¸¥à¸‡à¹€à¸žà¸·à¹ˆà¸­à¸à¸²à¸£à¸„ืนสภาพทีละส่วน';
+$lang['revstop'] = 'à¸à¸£à¸°à¸šà¸§à¸™à¸à¸²à¸£à¸„ืนสภาพสำเร็จเรียบร้อย';
+$lang['note1'] = 'คำเตือน: à¸à¸²à¸£à¸„้นนี้นับตัวพิมพ์ใหà¸à¹ˆà¹€à¸¥à¹‡à¸ (case sensitive)';
+$lang['note2'] = 'คำเตือน: เพจจะถูà¸à¸„ืนสภาพไปยังรุ่นล่าสุดที่ไม่มีประโยคสà¹à¸›à¸¡à¸™à¸µà¹‰ <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/tr/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/tr/intro.txt
new file mode 100644
index 000000000..ff123995a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/tr/intro.txt
@@ -0,0 +1,3 @@
+====== Eskiye Döndürme Yöneticisi ======
+
+Bu sayfa spam saldırılarına karşı otomatik eski haline çevirim yapmanızı sağlar. Spam içerikli sayfayı bulmak için bir anahtar kelime girin (mesela spam URLsi), daha sonra spame maruz kalan sayfalar olduğundan emin olup eski haline çevirin. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/tr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/tr/lang.php
new file mode 100644
index 000000000..164a8ec4f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/tr/lang.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Turkish language file
+ *
+ * @author Aydın Coşkuner aydinweb@gmail.com
+ * @author Aydın Coşkuner <aydinweb@gmail.com>
+ * @author yavuzselim@gmail.com
+ * @author Cihan Kahveci kahvecicihan@gmail.com
+ * @author Yavuz Selim <yavuzselim@gmail.com>
+ */
+$lang['menu'] = 'Eskiye Döndürme';
+$lang['filter'] = 'Spam bulunan sayfaları ara';
+$lang['revert'] = 'Seçili sayfaları eskiye döndür';
+$lang['reverted'] = '%s %s sürümüne geri çevrildi. ';
+$lang['removed'] = '%s kaldırıldı';
+$lang['revstart'] = 'Eskiye döndürme işlemi başlatıldı. Bu işlem uzun sürebilir. Eğer script işlemi tamamlayamadan zaman aşımına uğrarsa küçük parçalar halinde işlemi uygulayın.';
+$lang['revstop'] = 'Eskiye döndürme işlemi başarıyla tamamlandı.';
+$lang['note1'] = 'Not: bu aramada küçük harf büyük harf ayrımı vardır.';
+$lang['note2'] = 'Not: bu sayfa <i>%s</i> spam kelimelerini içermeyen son haline geri çevirilecektir.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/uk/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/uk/intro.txt
new file mode 100644
index 000000000..7bf5dfcb9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/uk/intro.txt
@@ -0,0 +1,3 @@
+====== Менеджер Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ======
+
+Ð¦Ñ Ñторінка дозволÑÑ” вам автоматично відновлюватиÑÑ Ð¿Ñ–ÑÐ»Ñ ÑпамерÑьких атак. Ð”Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÑпиÑку зіпÑутих Ñторінок Ñпочатку введіть Ñ€Ñдок (напр. ÑпамерÑьке поÑиланнÑ), а потім підтвердіть, що знайдена Ñторінка дійÑно Ñ” Ñпамом Ñ– відновіть редагуваннÑ. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/uk/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/uk/lang.php
new file mode 100644
index 000000000..37104bdd2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/uk/lang.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Ukrainian language file
+ *
+ * @author serg_stetsuk@ukr.net
+ * @author okunia@gmail.com
+ * @author Oleksandr Kunytsia <okunia@gmail.com>
+ * @author Uko uko@uar.net
+ */
+$lang['menu'] = 'Менеджер відновленнÑ';
+$lang['filter'] = 'Пошук Ñпамних Ñторінок';
+$lang['revert'] = 'Відновити обрані Ñторінки';
+$lang['reverted'] = '%s відновлено до верÑÑ–Ñ— %s';
+$lang['removed'] = '%s вилучено';
+$lang['revstart'] = 'Розпочато Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ. Це може зайнÑти багато чаÑу. Якщо Ñкрипт закінчує роботу по таймауту, необхідно відновлювати меншими чаÑтинами.';
+$lang['revstop'] = 'ÐŸÑ€Ð¾Ñ†ÐµÑ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÑƒÑпішно закінчено.';
+$lang['note1'] = 'Увага: пошук залежить від регіÑтру Ñимволів';
+$lang['note2'] = 'Увага: Ñторінку буде відновлено до оÑтанньої верÑÑ–Ñ—, Ñка не міÑтить ÑпамерÑького терміну <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/intro.txt
new file mode 100644
index 000000000..2aad10206
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/intro.txt
@@ -0,0 +1,3 @@
+====== 還原管ç†å™¨ ======
+
+該é é¢èƒ½å¹«åŠ©æ‚¨çš„é é¢å¾žåžƒåœ¾ä¿¡æ¯çš„攻擊中自動還原éŽä¾†ã€‚ 請先輸入關éµè©žæœç´¢åŒ…å«åžƒåœ¾ä¿¡æ¯çš„é é¢ï¼ˆå¦‚æŸå€‹åžƒåœ¾ä¿¡æ¯çš„ URL),然åŽè«‹ç¢ºå®šæœç´¢çµæžœçš„確包å«åžƒåœ¾ä¿¡æ¯ï¼Œä¸¦å°‡å…¶é‚„原至先å‰çš„修訂版。
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/lang.php
new file mode 100644
index 000000000..40a137dc0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/lang.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Chinese Traditional language file
+ *
+ * @author Li-Jiun Huang <ljhuang.tw@gmail.com>
+ * @author http://www.chinese-tools.com/tools/converter-simptrad.html
+ * @author Wayne San <waynesan@zerozone.tw>
+ * @author Li-Jiun Huang <ljhuang.tw@gmai.com>
+ * @author Cheng-Wei Chien <e.cwchien@gmail.com>
+ */
+$lang['menu'] = '還原管ç†';
+$lang['filter'] = 'æœç´¢åŒ…å«åžƒåœ¾ä¿¡æ¯çš„é é¢';
+$lang['revert'] = '還原所é¸çš„é é¢';
+$lang['reverted'] = '%s已還原到版本%s';
+$lang['removed'] = '%s已移除';
+$lang['revstart'] = '已開始還原æ“作。有å¯èƒ½éœ€è¦å¾ˆé•·æ™‚間。如果計時器在還原æ“作完æˆå‰åœæ­¢äº†ï¼Œè«‹å˜—試還原較少的內容。';
+$lang['revstop'] = '還原程åºå·²æˆå·¥çš„完æˆã€‚';
+$lang['note1'] = '注æ„: æœå°‹æœ‰åˆ†å¤§å°å¯«';
+$lang['note2'] = '注æ„: æ­¤é å°‡æœƒè¢«é‚„原到ä¸åŒ…å«çµ¦äºˆçš„spam term <i>%s</i> 的最新版本.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh/intro.txt
new file mode 100644
index 000000000..c697f8aea
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh/intro.txt
@@ -0,0 +1,3 @@
+====== 还原管ç†å™¨ ======
+
+该页é¢èƒ½å¸®åŠ©æ‚¨çš„页é¢ä»Žåžƒåœ¾ä¿¡æ¯çš„攻击中自动还原过æ¥ã€‚ 请先输入关键è¯æœç´¢åŒ…å«åžƒåœ¾ä¿¡æ¯çš„页é¢ï¼ˆå¦‚æŸä¸ªåžƒåœ¾ä¿¡æ¯çš„ URL),然åŽè¯·ç¡®å®šæœç´¢ç»“果的确包å«åžƒåœ¾ä¿¡æ¯ï¼Œå¹¶å°†å…¶è¿˜åŽŸè‡³å…ˆå‰çš„修订版。
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh/lang.php
new file mode 100644
index 000000000..6241b712b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh/lang.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Chinese(Simplified) language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author ZDYX <zhangduyixiong@gmail.com>
+ * @author http://www.chinese-tools.com/tools/converter-tradsimp.html
+ * @author George Sheraton guxd@163.com
+ * @author Simon zhan <simonzhan@21cn.com>
+ * @author mr.jinyi@gmail.com
+ */
+$lang['menu'] = '还原管ç†å™¨';
+$lang['filter'] = 'æœç´¢åŒ…å«åžƒåœ¾ä¿¡æ¯çš„页é¢';
+$lang['revert'] = '还原选中的页é¢';
+$lang['reverted'] = '%s 还原至修订版 %s';
+$lang['removed'] = '%s 已移除';
+$lang['revstart'] = '已开始还原æ“作。有å¯èƒ½éœ€è¦å¾ˆé•¿æ—¶é—´ã€‚如果计时器在还原æ“作完æˆå‰åœæ­¢äº†ï¼Œè¯·å°è¯•è¿˜åŽŸè¾ƒå°‘的内容。';
+$lang['revstop'] = '还原æ“作æˆåŠŸå®Œæˆã€‚';
+$lang['note1'] = '请注æ„:本次æœç´¢åŒºåˆ†å¤§å°å†™';
+$lang['note2'] = '请注æ„:本页é¢å°†è¢«è¿˜åŽŸè‡³ä¸åŒ…å«ç»™å®šåžƒåœ¾ä¿¡æ¯ <i>%s</i> 的最近的修订版。';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/README b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/README
new file mode 100644
index 000000000..21c5dcfae
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/README
@@ -0,0 +1,20 @@
+S5: A Simple Standards-Based Slide Show System
+http://meyerweb.com/eric/tools/s5/
+by Eric Meyer
+
+S5 reloaded version by Christian Effenberger
+
+Additional Themes from
+http://www.yatil.de/s5/download/
+by Martin Hense and Eric Eggert
+
+"dokuwiki" theme based on work by Anika Henke
+
+Additional themes from JesusDA at http://www.jesusda.com/projects/presentaciones_s5
+
+Scriptaculous was developed by Thomas Fuchs, http://script.aculo.us.
+
+Presentacular was developed by Jose Manuel Caicedo, http://cavorite.com/.
+
+The presentation icon was found at
+http://www.linkmatrix.de/index.php?id=icon
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/conf/default.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/conf/default.php
new file mode 100644
index 000000000..cd1f40c86
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/conf/default.php
@@ -0,0 +1,4 @@
+<?php
+
+$conf['template'] = 'dokuwiki';
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/conf/metadata.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/conf/metadata.php
new file mode 100644
index 000000000..7e83909ba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/conf/metadata.php
@@ -0,0 +1,4 @@
+<?php
+
+$meta['template'] = array('dirchoice','_dir' => DOKU_INC.'lib/plugins/s5/ui/');
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/en/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/en/lang.php
new file mode 100644
index 000000000..d38a3633a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/en/lang.php
@@ -0,0 +1,3 @@
+<?php
+
+$lang['view'] = 'View page as slide show';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/ru/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/ru/lang.php
new file mode 100644
index 000000000..3091a7eaf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/ru/lang.php
@@ -0,0 +1,3 @@
+<?php
+
+$lang['view'] = 'Смотреть Ñтраницу как Ñлайд-шоу';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/sp/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/sp/lang.php
new file mode 100644
index 000000000..bd8bf02f9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/sp/lang.php
@@ -0,0 +1,3 @@
+<?php
+
+$lang['view'] = 'Mostrar como presentación';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/plugin.info.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/plugin.info.txt
new file mode 100644
index 000000000..9692c8d2e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/plugin.info.txt
@@ -0,0 +1,8 @@
+# General Plugin Info do not edit
+base s5reloaded
+author Tomas Alonso
+email t.alonso@oan.es
+date 2010-07-18
+name S5 Reloaded Slideshow Plugin including Presentacular
+desc Display a Wiki page as S5 reloaded slideshow presentation with advanced effects using Presentacular
+url http://www.dokuwiki.org/plugin:s5reloaded
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/renderer.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/renderer.php
new file mode 100644
index 000000000..d0822a1ce
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/renderer.php
@@ -0,0 +1,338 @@
+<?php
+/**
+ * Renderer for XHTML output
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+// we inherit from the XHTML renderer instead directly of the base renderer
+require_once DOKU_INC.'inc/parser/xhtml.php';
+
+/**
+ * The Renderer
+ */
+class renderer_plugin_s5reloaded extends Doku_Renderer_xhtml {
+ var $slideopen = false;
+ var $notesopen = false;
+ var $base='';
+ var $tpl='';
+
+ /**
+ * the format we produce
+ */
+ function getFormat(){
+ // this should be 's5' usally, but we inherit from the xhtml renderer
+ // and produce XHTML as well, so we can gain magically compatibility
+ // by saying we're the 'xhtml' renderer here.
+ return 'xhtml';
+ }
+
+
+ /**
+ * Initialize the rendering
+ */
+ function document_start() {
+ global $ID;
+
+ // call the parent
+ parent::document_start();
+
+ // store the content type headers in metadata
+ $headers = array(
+ 'Content-Type' => 'text/html; charset=utf-8'
+ );
+ p_set_metadata($ID,array('format' => array('s5reloaded' => $headers) ));
+ $this->base = DOKU_MEDIA.'lib/plugins/s5reloaded/ui/';
+/* $this->tpl = $this->getConf('template'); */
+ $this->tpl = isset($_GET['s5theme'])?$_GET['s5theme']:$this->getConf('template');
+ }
+
+ /**
+ * Print the header of the page
+ *
+ * Gets called when the very first H1 header is discovered. It includes
+ * all the S5 CSS and JavaScript magic
+ */
+ function s5reloaded_init($title){
+ global $conf;
+ global $lang;
+ global $INFO;
+ global $ID;
+
+ //throw away any previous content
+ $this->doc = '
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="'.$conf['lang'].'"
+ lang="'.$conf['lang'].'" dir="'.$lang['direction'].'">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>'.hsc($title).'</title>
+<!-- metadata -->
+<meta name="generator" content="S5" />
+<meta name="version" content="S5 1.3" />
+<meta name="author" content="Eric A. Meyer" />
+<meta name="company" content="Complex Spiral Consulting" />
+<!-- meta extensions -->
+<meta name="subject" content="S5 1.3beta7" />
+<meta name="creator" content="Christian Effenberger" />
+<meta name="contributor" content="youcan[64]netzgesta[46]de" />
+<meta name="publisher" content="s5.netzgesta.de" />
+<meta name="description" content="S5 1.3 is a very flexible and lightweight slide show system available for anyone to use (including transitions and scalable fonts and images)" />
+<meta name="keywords" content="S5, slide show, projection-mode, powerpoint-like, scala-like, keynote-like, incremental display, scalable fonts, scalable images, transitions, notes, osf, xoxo, css, javascript, xhtml, public domain" />
+<!-- configuration parameters -->
+<meta name="defaultView" content="slideshow" />
+<meta name="controlVis" content="hidden" />
+<meta name="tranSitions" content="true" />
+<meta name="fadeDuration" content="500" />
+<meta name="incrDuration" content="250" />
+<!-- configuration autoplay extension -->
+<meta name="autoMatic" content="false" />
+<meta name="playLoop" content="true" />
+<meta name="playDelay" content="10" />
+<!-- configuration audio extension -->
+<meta name="audioSupport" content="true" />
+<meta name="audioVolume" content="100" />
+<meta name="audioError" content="true" />
+<!-- configuration audio debug -->
+<meta name="audioDebug" content="false" />
+<!-- style sheet links -->
+<link rel="stylesheet" href="'.$this->base.$this->tpl.'/slides.css" type="text/css" media="projection" id="slideProj" />
+<link rel="stylesheet" href="'.$this->base.$this->tpl.'/outline.css" type="text/css" media="screen" id="outlineStyle" />
+<link rel="stylesheet" href="'.$this->base.$this->tpl.'/print.css" type="text/css" media="print" id="slidePrint" />
+<link rel="stylesheet" href="'.$this->base.$this->tpl.'/opera.css" type="text/css" media="projection" id="operaFix" />
+<link rel="stylesheet" href="'.$this->base.$this->tpl.'/wrap.css" type="text/css" />
+
+<style type="text/css" media="all">
+.imgcon {width: 100%; margin: 0 auto; padding: 0; text-align: center;}
+#anim {width: 33%; height: 320px; position: relative;}
+#anim img {position: absolute; top: 0px; left: 0px;}
+.logo {margin: 0.2em 0 0 0.15em; padding: 0;}
+.clock {margin: 0.1em 0.2em; padding: 0; position: absolute; top: 0em; right: 0em;}
+.red {color: #C02;}
+</style>
+
+<!-- S5 JS -->
+<script src="'.$this->base.$this->tpl.'/slides.js" type="text/javascript"></script>
+
+<!-- prototype + scriptaculous -->
+<script src="'.$this->base.'effects_support/prototype.js" type="text/javascript"></script>
+<script src="'.$this->base.'effects_support/scriptaculous.js" type="text/javascript"></script>
+
+<!-- Presentaculous JS -->
+<script src="'.$this->base.'effects_support/presentacular.js" type="text/javascript"></script>
+
+<script type="text/javascript" charset="utf-8" src="'.$this->base.'../../asciimath/asciimathml148r.js" ></script>
+
+
+</head>
+<body>
+
+<div class="layout">
+<div id="controls"><!-- DO NOT EDIT --></div>
+<div id="currentSlide"><!-- DO NOT EDIT --></div>
+<div id="header">
+<div class="scale" id="logo" style="background:url('.elgg_get_page_owner_entity()->getIcon('small').') no-repeat;"><!-- DO NOT EDIT --></div>
+</div>
+<div id="footer">
+<h1>'.$title.'</h1>
+<h2>'.hsc($conf['title']).' &#8226; '.strftime($conf['dformat'],$INFO['lastmod']).'</h2>
+<div class="scale" id="logo_bottom"><!-- DO NOT EDIT --></div>
+</div>
+</div>
+<div class="presentation">
+';
+ }
+
+ /**
+ * Closes the document
+ */
+ function document_end(){
+ // we don't care for footnotes and toc
+ // but cleanup is nice
+ $this->doc = preg_replace('#<p>\s*</p>#','',$this->doc);
+
+ if($this->slideopen){
+ $this->doc .= '</div>'.DOKU_LF; //close previous slide
+ }
+ if($this->notesopen){
+ $this->doc .= '</div>'.DOKU_LF; //close notes
+ $this->notesopen = false;
+ }
+ $this->doc .= '</div>
+ </body>
+ </html>';
+ }
+
+ /**
+ * This is what creates new slides
+ *
+ * A new slide is started for each H2 header
+ */
+ function header($text, $level, $pos) {
+ if($level == 1){
+ if(!$this->slideopen){
+ $this->s5reloaded_init($text); // this is the first slide
+ $level = 2;
+ }else{
+ return;
+ }
+ }
+
+ if($level == 2){
+ $this->last_h1 = $text;
+ }
+ if($level > 1){
+ //if($level == 2){
+ if($this->notesopen){
+ $this->doc .= '</div>'.DOKU_LF; //close notes
+ $this->notesopen = false;
+ }
+ $this->doc .= '<div class="slide">'.DOKU_LF;
+ $this->slideopen = true;
+ }
+ $this->doc .= '<h1>';
+ if ($this->last_h1 && $level > 2) {
+ $this->doc .= $this->_xmlEntities($this->last_h1.": ".$text);
+ $this->doc .= '</h1>'.DOKU_LF;
+ /* $this->doc .= '<h'.($level-1).'> ';
+ $this->doc .= '</h'.($level-1).'>'.DOKU_LF;
+ $this->doc .= '<h'.($level-1).'>';
+ $this->doc .= $text;
+ $this->doc .= '</h'.($level-1).'>'.DOKU_LF;*/
+ }
+ else {
+ $this->doc .= $this->_xmlEntities($text);
+ $this->doc .= '</h1>'.DOKU_LF;
+ }
+ }
+
+ /**
+ * Top-Level Sections are slides
+ */
+ function section_open($level) {
+// if($level < 3){
+// $this->doc .= '<div class="slidecontent">'.DOKU_LF;
+// }else{
+// $this->doc .= '<div>'.DOKU_LF;
+// }
+ // we don't use it
+ }
+
+ /**
+ * Throw away footnote
+ */
+ function footnote_close() {
+ // recover footnote into the stack and restore old content
+ $footnote = $this->doc;
+ $this->doc = $this->store;
+ $this->store = '';
+ }
+
+ /**
+ * No acronyms in a presentation
+ */
+ function acronym($acronym){
+ $this->doc .= $this->_xmlEntities($acronym);
+ }
+
+ /**
+ * A line stops the slide and start the handout section
+ */
+ function hr() {
+ $this->doc .= '<div class="notes">'.DOKU_LF;
+ $this->notesopen = true;
+ }
+
+ /**
+ * Renders internal and external media
+ */
+ function _media ($src, $title=NULL, $align=NULL, $width=NULL,
+ $height=NULL, $cache=NULL, $render = true) {
+
+ $ret = '';
+
+ list($ext,$mime,$dl) = mimetype($src);
+ if(substr($mime,0,5) == 'image'){
+ // first get the $title
+ if (!is_null($title)) {
+ $title = $this->_xmlEntities($title);
+ }elseif($ext == 'jpg' || $ext == 'jpeg'){
+ //try to use the caption from IPTC/EXIF
+ require_once(DOKU_INC.'inc/JpegMeta.php');
+ $jpeg =& new JpegMeta(mediaFN($src));
+ if($jpeg !== false) $cap = $jpeg->getTitle();
+ if($cap){
+ $title = $this->_xmlEntities($cap);
+ }
+ }
+ if (!$render) {
+ // if the picture is not supposed to be rendered
+ // return the title of the picture
+ if (!$title) {
+ // just show the sourcename
+ $title = $this->_xmlEntities(basename(noNS($src)));
+ }
+ return $title;
+ }
+ //add image tag
+ $ret .= '<img src="'.ml($src,array('w'=>$width,'h'=>$height,'cache'=>$cache)).'"';
+ $ret .= ' class="scale"';
+
+ // make left/right alignment for no-CSS view work (feeds)
+ if($align == 'right') $ret .= ' align="right"';
+ if($align == 'left') $ret .= ' align="left"';
+
+ if ($title) {
+ $ret .= ' title="' . $title . '"';
+ $ret .= ' alt="' . $title .'"';
+ }else{
+ $ret .= ' alt=""';
+ }
+
+ if ( !is_null($width) )
+ $ret .= ' width="'.$this->_xmlEntities($width).'"';
+
+ if ( !is_null($height) )
+ $ret .= ' height="'.$this->_xmlEntities($height).'"';
+
+ $ret .= ' />';
+
+ }elseif($mime == 'application/x-shockwave-flash'){
+ if (!$render) {
+ // if the flash is not supposed to be rendered
+ // return the title of the flash
+ if (!$title) {
+ // just show the sourcename
+ $title = basename(noNS($src));
+ }
+ return $this->_xmlEntities($title);
+ }
+
+ $att = array();
+ $att['class'] = "media$align";
+ if($align == 'right') $att['align'] = 'right';
+ if($align == 'left') $att['align'] = 'left';
+ $ret .= html_flashobject(ml($src,array('cache'=>$cache)),$width,$height,
+ array('quality' => 'high'),
+ null,
+ $att,
+ $this->_xmlEntities($title));
+ }elseif($title){
+ // well at least we have a title to display
+ $ret .= $this->_xmlEntities($title);
+ }else{
+ // just show the sourcename
+ $ret .= $this->_xmlEntities(basename(noNS($src)));
+ }
+
+ return $ret;
+ }
+
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/screen.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/screen.gif
new file mode 100644
index 000000000..0c506e397
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/screen.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/syntax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/syntax.php
new file mode 100644
index 000000000..40b1d0630
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/syntax.php
@@ -0,0 +1,72 @@
+<?php
+/**
+ * S5 Reloaded Plugin: Display a Wiki page as S5 reloaded slideshow presentation
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Tomas Alonso <t.alonso@oan.es>, Andreas Gohr <andi@splitbrain.org>
+ */
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'syntax.php');
+
+/**
+ * All DokuWiki plugins to extend the parser/rendering mechanism
+ * need to inherit from this class
+ */
+class syntax_plugin_s5reloaded extends DokuWiki_Syntax_Plugin {
+
+ /**
+ * What kind of syntax are we?
+ */
+ function getType(){
+ return 'substition';
+ }
+
+ /**
+ * What about paragraphs?
+ */
+ function getPType(){
+ return 'normal';
+ }
+
+ /**
+ * Where to sort in?
+ */
+ function getSort(){
+ return 800;
+ }
+
+
+ /**
+ * Connect pattern to lexer
+ */
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern('~~SLIDESHOW[^~]*~~',$mode,'plugin_s5reloaded');
+ }
+
+
+ /**
+ * Handle the match
+ */
+ function handle($match, $state, $pos, &$handler){
+ if($match!='~~SLIDESHOW~~') return array(trim(substr($match,11,-2)));
+ return array();
+ }
+
+ /**
+ * Create output
+ */
+ function render($format, &$renderer, $data) {
+ global $ID;
+ if($format != 'xhtml') return false;
+
+ $renderer->doc .= '<a href="'.exportlink($ID, 's5reloaded',sizeof($data)?array('s5theme'=>$data[0]):null).'" title="'.$this->getLang('view').'">';
+ $renderer->doc .= '<img src="'.DOKU_BASE.'lib/plugins/s5reloaded/screen.gif" align="right" alt="'.$this->getLang('view').'" width="48" height="48" />';
+ $renderer->doc .= '</a>';
+ return true;
+ }
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/license.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/license.txt
new file mode 100755
index 000000000..1a17182fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/license.txt
@@ -0,0 +1,29 @@
+Software License Agreement (BSD License)
+
+Copyright (c) 2007, Scott Schiller (schillmania.com)
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice, this
+ list of conditions and the following disclaimer in the documentation and/or
+ other materials provided with the distribution.
+
+* Neither the name of schillmania.com nor the names of its contributors may be
+ used to endorse or promote products derived from this software without
+ specific prior written permission from schillmania.com.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/null.mp3 b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/null.mp3
new file mode 100755
index 000000000..43cc6135d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/null.mp3
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.js
new file mode 100644
index 000000000..9095b5de3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.js
@@ -0,0 +1,658 @@
+/*
+ SoundManager 2: Javascript Sound for the Web.
+ --------------------------------------------------
+ http://www.schillmania.com/projects/soundmanager2/
+
+ Copyright (c) 2007, Scott Schiller. All rights reserved.
+ Code licensed under the BSD License:
+ http://www.schillmania.com/projects/soundmanager2/license.txt
+
+ Beta V2.0b.20070118
+*/
+
+function SoundManager(smURL,smID) {
+ var self = this;
+ this.enabled = false;
+ this.o = null;
+ this.url = (smURL||s5Path+'ui/audio_support/soundmanager2.swf');
+ this.id = (smID||'sm2movie');
+ this.oMC = null;
+ this.sounds = [];
+ this.soundIDs = [];
+ this.allowPolling = true; // allow flash to poll for status update (required for "while playing", "progress" etc. to work.)
+ this.isIE = (navigator.userAgent.match(/MSIE/));
+ this.isSafari = (navigator.userAgent.match(/safari/i));
+ this._didAppend = false;
+ this._didInit = false;
+ this._disabled = false;
+ this.version = 'V2.0b.20070118';
+
+ this.defaultOptions = {
+ // -----------------
+ 'debugMode': false, // enable debug/status messaging, handy for development/troubleshooting - will be written to a DIV with an ID of "soundmanager-debug", you can use CSS to make it pretty
+ 'autoLoad': false, // enable automatic loading (otherwise .load() will be called on demand with .play(), the latter being nicer on bandwidth - if you want to .load yourself, you also can)
+ 'stream': true, // allows playing before entire file has loaded (recommended)
+ 'autoPlay': false, // enable playing of file as soon as possible (much faster if "stream" is true)
+ 'onid3': null, // callback function for "ID3 data is added/available"
+ 'onload': null, // callback function for "load finished"
+ 'whileloading': null, // callback function for "download progress update" (X of Y bytes received)
+ 'onplay': null, // callback for "play" start
+ 'whileplaying': null, // callback during play (position update)
+ 'onstop': null, // callback for "user stop"
+ 'onfinish': null, // callback function for "sound finished playing"
+ 'onbeforefinish': null, // callback for "before sound finished playing (at [time])"
+ 'onbeforefinishtime': 2000, // offset (milliseconds) before end of sound to trigger beforefinish (eg. 1000 msec = 1 second)
+ 'onbeforefinishcomplete':null, // function to call when said sound finishes playing
+ 'onjustbeforefinish':null, // callback for [n] msec before end of current sound
+ 'onjustbeforefinishtime':200, // [n] - if not using, set to 0 (or null handler) and event will not fire.
+ 'multiShot': true, // let sounds "restart" or layer on top of each other when played multiple times, rather than one-shot/one at a time
+ 'pan': 0, // "pan" settings, left-to-right, -100 to 100
+ 'volume': 100, // self-explanatory. 0-100, the latter being the max.
+ // -----------------
+ 'foo': 'bar' // you don't need to change this one - it's actually an intentional filler.
+ }
+
+ // --- public methods ---
+
+ this.getMovie = function(smID) {
+ // return self.isIE?window[smID]:document[smID];
+ return self.isIE?window[smID]:(self.isSafari?document[smID+'-embed']:document.getElementById(smID+'-embed'));
+ }
+
+ this.loadFromXML = function(sXmlUrl) {
+ try {
+ self.o._loadFromXML(sXmlUrl);
+ } catch(e) {
+ self._failSafely();
+ return true;
+ }
+ }
+
+ this.createSound = function(oOptions) {
+ if (!self._didInit) throw new Error('soundManager.createSound(): Not loaded yet - wait for soundManager.onload() before calling sound-related methods');
+ if (arguments.length==2) {
+ // function overloading in JS! :) ..assume simple createSound(id,url) use case
+ oOptions = {'id':arguments[0],'url':arguments[1]}
+ }
+ var thisOptions = self._mergeObjects(oOptions);
+ self._writeDebug('soundManager.createSound(): "<a href="#" onclick="soundManager.play(\''+thisOptions.id+'\');return false" title="play this sound">'+thisOptions.id+'</a>" ('+thisOptions.url+')');
+ if (self._idCheck(thisOptions.id,true)) {
+ self._writeDebug('sound '+thisOptions.id+' already defined - exiting');
+ return false;
+ }
+ self.sounds[thisOptions.id] = new SMSound(self,thisOptions);
+ self.soundIDs[self.soundIDs.length] = thisOptions.id;
+ try {
+ self.o._createSound(thisOptions.id,thisOptions.onjustbeforefinishtime);
+ } catch(e) {
+ self._failSafely();
+ return true;
+ }
+ if (thisOptions.autoLoad || thisOptions.autoPlay) self.sounds[thisOptions.id].load(thisOptions);
+ if (thisOptions.autoPlay) self.sounds[thisOptions.id].playState = 1; // we can only assume this sound will be playing soon.
+ }
+
+ this.load = function(sID,oOptions) {
+ if (!self._idCheck(sID)) return false;
+ self.sounds[sID].load(oOptions);
+ }
+
+ this.unload = function(sID) {
+ if (!self._idCheck(sID)) return false;
+ self.sounds[sID].unload();
+ }
+
+ this.play = function(sID,oOptions) {
+ if (!self._idCheck(sID)) {
+ if (typeof oOptions != 'Object') oOptions = {url:oOptions}; // overloading use case: play('mySound','/path/to/some.mp3');
+ if (oOptions && oOptions.url) {
+ // overloading use case, creation + playing of sound: .play('someID',{url:'/path/to.mp3'});
+ self._writeDebug('soundController.play(): attempting to create "'+sID+'"');
+ oOptions.id = sID;
+ self.createSound(oOptions);
+ } else {
+ return false;
+ }
+ }
+ self.sounds[sID].play(oOptions);
+ }
+
+ this.start = this.play; // just for convenience
+
+ this.setPosition = function(sID,nMsecOffset) {
+ if (!self._idCheck(sID)) return false;
+ self.sounds[sID].setPosition(nMsecOffset);
+ }
+
+ this.stop = function(sID) {
+ if (!self._idCheck(sID)) return false;
+ self._writeDebug('soundManager.stop('+sID+')');
+ self.sounds[sID].stop();
+ }
+
+ this.stopAll = function() {
+ for (var oSound in self.sounds) {
+ if (oSound instanceof SMSound) oSound.stop(); // apply only to sound objects
+ }
+ }
+
+ this.pause = function(sID) {
+ if (!self._idCheck(sID)) return false;
+ self.sounds[sID].pause();
+ }
+
+ this.resume = function(sID) {
+ if (!self._idCheck(sID)) return false;
+ self.sounds[sID].resume();
+ }
+
+ this.togglePause = function(sID) {
+ if (!self._idCheck(sID)) return false;
+ self.sounds[sID].togglePause();
+ }
+
+ this.setPan = function(sID,nPan) {
+ if (!self._idCheck(sID)) return false;
+ self.sounds[sID].setPan(nPan);
+ }
+
+ this.setVolume = function(sID,nVol) {
+ if (!self._idCheck(sID)) return false;
+ self.sounds[sID].setVolume(nVol);
+ }
+
+ this.setPolling = function(bPolling) {
+ if (!self.o || !self.allowPolling) return false;
+ self._writeDebug('soundManager.setPolling('+bPolling+')');
+ self.o._setPolling(bPolling);
+ }
+
+ this.disable = function() {
+ // destroy all functions
+ if (self._disabled) return false;
+ self._disabled = true;
+ self._writeDebug('soundManager.disable(): Disabling all functions - future calls will return false.');
+ for (var i=self.soundIDs.length; i--;) {
+ self._disableObject(self.sounds[self.soundIDs[i]]);
+ }
+ self.initComplete(); // fire "complete", despite fail
+ self._disableObject(self);
+ }
+
+ this.getSoundById = function(sID,suppressDebug) {
+ if (!sID) throw new Error('SoundManager.getSoundById(): sID is null/undefined');
+ var result = self.sounds[sID];
+ if (!result && !suppressDebug) {
+ self._writeDebug('"'+sID+'" is an invalid sound ID.');
+ // soundManager._writeDebug('trace: '+arguments.callee.caller);
+ }
+ return result;
+ }
+
+ this.onload = function() {
+ onloadSM2();
+ // window.onload() equivalent for SM2, ready to create sounds etc.
+ // this is a stub - you can override this in your own external script, eg. soundManager.onload = function() {}
+ // soundManager._writeDebug('<em>Warning</em>: soundManager.onload() is undefined.');
+ }
+
+ this.onerror = function() {
+ onerrorSM2();
+ // stub for user handler, called when SM2 fails to load/init
+ }
+
+ // --- "private" methods ---
+
+ this._idCheck = this.getSoundById;
+
+ this._disableObject = function(o) {
+ for (var oProp in o) {
+ if (typeof o[oProp] == 'function') o[oProp] = function(){return false;}
+ }
+ oProp = null;
+ }
+
+ this._failSafely = function() {
+ // exception handler for "object doesn't support this property or method"
+ var flashCPLink = 'http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html';
+ var fpgssTitle = 'You may need to whitelist this location/domain eg. file://C:/ or C:/ or mysite.com, or set ALWAYS ALLOW under the Flash Player Global Security Settings page. Note that this seems to apply only to file system viewing.';
+ var flashCPL = '<a href="'+flashCPLink+'" title="'+fpgssTitle+'">view/edit</a>';
+ var FPGSS = '<a href="'+flashCPLink+'" title="Flash Player Global Security Settings">FPGSS</a>';
+ if (!self._disabled) {
+ self._writeDebug('soundManager: JS-&gt;Flash communication failed. Possible causes: flash/browser security restrictions ('+flashCPL+'), insufficient browser/plugin support, or .swf not found');
+ self._writeDebug('Verify that the movie path of <em>'+self.url+'</em> is correct (<a href="'+self.url+'" title="If you get a 404/not found, fix it!">test link</a>)');
+ if (self._didAppend) {
+ if (!document.domain) {
+ self._writeDebug('Loading from local file system? (document.domain appears to be null, this location may need whitelisting by '+FPGSS+')');
+ self._writeDebug('Possible security/domain restrictions ('+flashCPL+'), should work when served by http on same domain');
+ }
+ // self._writeDebug('Note: Movie added via JS method, static object/embed in-page markup method may work instead.');
+ }
+ self.disable();
+ }
+ }
+
+ this._createMovie = function(smID,smURL) {
+ var useDOM = !self.isIE; // IE needs document.write() to work, long story short - lame
+ if (window.location.href.indexOf('debug=1')+1) self.defaultOptions.debugMode = true; // allow force of debug mode via URL
+ var html = ['<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="16" height="16" id="'+smID+'"><param name="movie" value="'+smURL+'"><param name="quality" value="high"><param name="allowScriptAccess" value="always" /></object>','<embed name="'+smID+'-embed" id="'+smID+'-embed" src="'+smURL+'" width="1" height="1" quality="high" allowScriptAccess="always" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"></embed>'];
+ var debugID = 'soundmanager-debug';
+ var debugHTML = '<div id="'+debugID+'" style="display:'+(self.defaultOptions.debugMode?'block':'none')+'"></div>';
+ if (useDOM) {
+ self.oMC = document.createElement('div');
+ self.oMC.className = 'movieContainer';
+ // "hide" flash movie
+ self.oMC.style.position = 'absolute';
+ self.oMC.style.left = '-256px';
+ self.oMC.style.width = '1px';
+ self.oMC.style.height = '1px';
+ self.oMC.innerHTML = html[self.isIE?0:1];
+ var oTarget = (!self.isIE && document.body?document.body:document.getElementsByTagName('div')[0]);
+ oTarget.appendChild(self.oMC); // append to body here can throw "operation aborted" under IE
+ if (!document.getElementById(debugID)) {
+ var oDebug = document.createElement('div');
+ oDebug.id = debugID;
+ oDebug.style.display = (self.defaultOptions.debugMode?'block':'none');
+ oTarget.appendChild(oDebug);
+ }
+ oTarget = null;
+ } else {
+ // IE method - local file system, may cause strange JS error at line 53?
+ // I hate this method, but it appears to be the only one that will work (createElement works, but JS->Flash communication oddly fails when viewing locally.)
+ // Finally, IE doesn't do application/xhtml+xml yet (thus document.write() is still minimally acceptable here.)
+ if (document.getElementById(debugID)) debugHTML = ''; // avoid overwriting
+ document.write('<div style="position:absolute;left:-256px;top:-256px;width:1px;height:1px" class="movieContainer">'+html[self.isIE?0:1]+'</div>'+debugHTML);
+ }
+ self._didAppend = true;
+ self._writeDebug('-- SoundManager 2 Version '+self.version.substr(1)+' --');
+ self._writeDebug('soundManager._createMovie(): trying to load <a href="'+smURL+'" title="Test this link (404=bad)">'+smURL+'</a>');
+ }
+
+ this._writeDebug = function(sText) {
+ if (!self.defaultOptions.debugMode) return false;
+ var sDID = 'soundmanager-debug';
+ try {
+ var o = document.getElementById(sDID);
+ if (!o) {
+ // attempt to create soundManager debug element
+ var oNew = document.createElement('div');
+ oNew.id = sDID;
+ // o = document.body.appendChild(oNew);
+ o = null;
+ if (!o) return false;
+ }
+ var p = document.createElement('div');
+ p.innerHTML = sText;
+ // o.appendChild(p); // top-to-bottom
+ o.insertBefore(p,o.firstChild); // bottom-to-top
+ } catch(e) {
+ // oh well
+ }
+ o = null;
+ }
+
+ this._debug = function() {
+ self._writeDebug('soundManager._debug(): sounds by id/url:');
+ for (var i=0,j=self.soundIDs.length; i<j; i++) {
+ self._writeDebug(self.sounds[self.soundIDs[i]].sID+' | '+self.sounds[self.soundIDs[i]].url);
+ }
+ }
+
+ this._mergeObjects = function(oMain,oAdd) {
+ // non-destructive merge
+ var o1 = oMain;
+ var o2 = (typeof oAdd == 'undefined'?self.defaultOptions:oAdd);
+ for (var o in o2) {
+ if (typeof o1[o] == 'undefined') o1[o] = o2[o];
+ }
+ return o1;
+ }
+
+ this.createMovie = function(sURL) {
+ self._writeDebug('soundManager.createMovie('+(sURL||'')+')');
+ if (sURL) self.url = sURL;
+ self._initMovie();
+ }
+
+ this._initMovie = function() {
+ // attempt to get, or create, movie
+ if (self.o) return false; // pre-init may have fired this function before window.onload(), may already exist
+ self.o = self.getMovie(self.id); // try to get flash movie (inline markup)
+ if (!self.o) {
+ // try to create
+ self._createMovie(self.id,self.url);
+ self.o = self.getMovie(self.id);
+ }
+ if (!self.o) {
+ self._writeDebug('SoundManager(): Could not find object/embed element. Sound will be disabled.');
+ self.disable();
+ } else {
+ self._writeDebug('SoundManager(): Got '+self.o.nodeName+' element ('+(self._didAppend?'created via JS':'static HTML')+')');
+ }
+ }
+
+ this.initComplete = function() {
+ if (self._didInit) return false;
+ self._didInit = true;
+ self._writeDebug('-- SoundManager 2 '+(self._disabled?'failed to load':'loaded')+' ('+(self._disabled?'security/load error':'OK')+') --');
+ if (self._disabled) {
+ self._writeDebug('soundManager.initComplete(): calling soundManager.onerror()');
+ self.onerror.apply(window);
+ return false;
+ }
+ self._writeDebug('soundManager.initComplete(): calling soundManager.onload()');
+ try {
+ // call user-defined "onload", scoped to window
+ self.onload.apply(window);
+ } catch(e) {
+ // something broke (likely JS error in user function)
+ self._writeDebug('soundManager.onload() threw an exception: '+e.message);
+ throw e; // (so browser/console gets message)
+ }
+ self._writeDebug('soundManager.onload() complete');
+ }
+
+ this.init = function() {
+ // called after onload()
+ self._initMovie();
+ // event cleanup
+ if (window.removeEventListener) {
+ window.removeEventListener('load',self.beginInit,false);
+ } else if (window.detachEvent) {
+ window.detachEvent('onload',self.beginInit);
+ }
+ try {
+ self.o._externalInterfaceTest(); // attempt to talk to Flash
+ self._writeDebug('Flash ExternalInterface call (JS -&gt; Flash) succeeded.');
+ if (!self.allowPolling) self._writeDebug('Polling (whileloading/whileplaying support) is disabled.');
+ self.setPolling(true);
+ self.enabled = true;
+ } catch(e) {
+ self._failSafely();
+ self.initComplete();
+ return false;
+ }
+ self.initComplete();
+ }
+
+ this.beginInit = function() {
+ self._initMovie();
+ setTimeout(self.init,1000); // some delay required, otherwise JS<->Flash/ExternalInterface communication fails under non-IE (?!)
+ }
+
+ this.destruct = function() {
+ if (self.isSafari) {
+ /* --
+ Safari 1.3.2 (v312.6)/OSX 10.3.9 and perhaps newer will crash if a sound is actively loading when user exits/refreshes/leaves page
+ (Apparently related to ExternalInterface making calls to an unloading/unloaded page?)
+ Unloading sounds (detaching handlers and so on) may help to prevent this
+ -- */
+ for (var i=self.soundIDs.length; i--;) {
+ if (self.sounds[self.soundIDs[i]].readyState == 1) self.sounds[self.soundIDs[i]].unload();
+ }
+ }
+ self.disable();
+ // self.o = null;
+ // self.oMC = null;
+ }
+
+}
+
+function SMSound(oSM,oOptions) {
+ var self = this;
+ var sm = oSM;
+ this.sID = oOptions.id;
+ this.url = oOptions.url;
+ this.options = sm._mergeObjects(oOptions);
+ this.id3 = {
+ /*
+ Name/value pairs set via Flash when available - see reference for names:
+ http://livedocs.macromedia.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00001567.html
+ (eg., this.id3.songname or this.id3['songname'])
+ */
+ }
+
+ self.resetProperties = function(bLoaded) {
+ self.bytesLoaded = null;
+ self.bytesTotal = null;
+ self.position = null;
+ self.duration = null;
+ self.durationEstimate = null;
+ self.loaded = false;
+ self.loadSuccess = null;
+ self.playState = 0;
+ self.paused = false;
+ self.readyState = 0; // 0 = uninitialised, 1 = loading, 2 = failed/error, 3 = loaded/success
+ self.didBeforeFinish = false;
+ self.didJustBeforeFinish = false;
+ }
+
+ self.resetProperties();
+
+ // --- public methods ---
+
+ this.load = function(oOptions) {
+ self.loaded = false;
+ self.loadSuccess = null;
+ self.readyState = 1;
+ self.playState = (oOptions.autoPlay||false); // if autoPlay, assume "playing" is true (no way to detect when it actually starts in Flash unless onPlay is watched?)
+ var thisOptions = sm._mergeObjects(oOptions);
+ if (typeof thisOptions.url == 'undefined') thisOptions.url = self.url;
+ try {
+ sm._writeDebug('loading '+thisOptions.url);
+ sm.o._load(self.sID,thisOptions.url,thisOptions.stream,thisOptions.autoPlay,thisOptions.whileloading?1:0);
+ } catch(e) {
+ sm._writeDebug('SMSound().load(): JS-&gt;Flash communication failed.');
+ }
+ }
+
+ this.unload = function() {
+ // Flash 8/AS2 can't "close" a stream - fake it by loading an empty MP3
+ sm._writeDebug('SMSound().unload()');
+ self.setPosition(0); // reset current sound positioning
+ sm.o._unload(self.sID,s5Path+'ui/audio_support/null.mp3');
+ // reset load/status flags
+ self.resetProperties();
+ }
+
+ this.play = function(oOptions) {
+ if (!oOptions) oOptions = {};
+
+ // --- TODO: make event handlers specified via oOptions only apply to this instance of play() (eg. onfinish applies but will reset to default on finish)
+ if (oOptions.onfinish) self.options.onfinish = oOptions.onfinish;
+ if (oOptions.onbeforefinish) self.options.onbeforefinish = oOptions.onbeforefinish;
+ if (oOptions.onjustbeforefinish) self.options.onjustbeforefinish = oOptions.onjustbeforefinish;
+ // ---
+
+ var thisOptions = sm._mergeObjects(oOptions);
+ if (self.playState == 1) {
+ // var allowMulti = typeof oOptions.multiShot!='undefined'?oOptions.multiShot:sm.defaultOptions.multiShot;
+ var allowMulti = thisOptions.multiShot;
+ if (!allowMulti) {
+ sm._writeDebug('SMSound.play(): "'+self.sID+'" already playing? (one-shot)');
+ return false;
+ } else {
+ sm._writeDebug('SMSound.play(): "'+self.sID+'" already playing (multi-shot)');
+ }
+ }
+ if (!self.loaded) {
+ if (self.readyState == 0) {
+ sm._writeDebug('SMSound.play(): .play() before load request. Attempting to load "'+self.sID+'"');
+ // try to get this sound playing ASAP
+ thisOptions.stream = true;
+ thisOptions.autoPlay = true;
+ // TODO: need to investigate when false, double-playing
+ // if (typeof oOptions.autoPlay=='undefined') thisOptions.autoPlay = true; // only set autoPlay if unspecified here
+ self.load(thisOptions); // try to get this sound playing ASAP
+ } else if (self.readyState == 2) {
+ sm._writeDebug('SMSound.play(): Could not load "'+self.sID+'" - exiting');
+ return false;
+ } else {
+ sm._writeDebug('SMSound.play(): "'+self.sID+'" is loading - attempting to play..');
+ }
+ } else {
+ sm._writeDebug('SMSound.play(): "'+self.sID+'"');
+ }
+ if (self.paused) {
+ self.resume();
+ } else {
+ self.playState = 1;
+ self.position = (thisOptions.offset||0);
+ if (thisOptions.onplay) thisOptions.onplay.apply(self);
+ self.setVolume(thisOptions.volume);
+ self.setPan(thisOptions.pan);
+ if (!thisOptions.autoPlay) {
+ sm._writeDebug('starting sound '+self.sID);
+ sm.o._start(self.sID,thisOptions.loop||1,self.position); // TODO: verify !autoPlay doesn't cause issue
+ }
+ }
+ }
+
+ this.start = this.play; // just for convenience
+
+ this.stop = function(bAll) {
+ if (self.playState == 1) {
+ self.playState = 0;
+ self.paused = false;
+ if (sm.defaultOptions.onstop) sm.defaultOptions.onstop.apply(self);
+ sm.o._stop(self.sID);
+ }
+ }
+
+ this.setPosition = function(nMsecOffset) {
+ // sm._writeDebug('setPosition('+nMsecOffset+')');
+ sm.o._setPosition(self.sID,nMsecOffset/1000,self.paused||!self.playState); // if paused or not playing, will not resume (by playing)
+ }
+
+ this.pause = function() {
+ if (self.paused) return false;
+ sm._writeDebug('SMSound.pause()');
+ self.paused = true;
+ sm.o._pause(self.sID);
+ }
+
+ this.resume = function() {
+ if (!self.paused) return false;
+ sm._writeDebug('SMSound.resume()');
+ self.paused = false;
+ sm.o._pause(self.sID); // flash method is toggle-based (pause/resume)
+ }
+
+ this.togglePause = function() {
+ // if playing, pauses - if paused, resumes playing.
+ sm._writeDebug('SMSound.togglePause()');
+ if (!self.playState) {
+ // self.setPosition();
+ self.play({offset:self.position/1000});
+ return false;
+ }
+ if (self.paused) {
+ sm._writeDebug('SMSound.togglePause(): resuming..');
+ self.resume();
+ } else {
+ sm._writeDebug('SMSound.togglePause(): pausing..');
+ self.pause();
+ }
+ }
+
+ this.setPan = function(nPan) {
+ if (typeof nPan == 'undefined') nPan = 0;
+ sm.o._setPan(self.sID,nPan);
+ self.options.pan = nPan;
+ }
+
+ this.setVolume = function(nVol) {
+ if (typeof nVol == 'undefined') nVol = 100;
+ sm.o._setVolume(self.sID,nVol);
+ self.options.volume = nVol;
+ }
+
+ // --- "private" methods called by Flash ---
+
+ this._whileloading = function(nBytesLoaded,nBytesTotal,nDuration) {
+ self.bytesLoaded = nBytesLoaded;
+ self.bytesTotal = nBytesTotal;
+ self.duration = nDuration;
+ self.durationEstimate = parseInt((self.bytesTotal/self.bytesLoaded)*self.duration); // estimate total time (will only be accurate with CBR MP3s.)
+ if (self.readyState != 3 && self.options.whileloading) self.options.whileloading.apply(self);
+ // soundManager._writeDebug('duration/durationEst: '+self.duration+' / '+self.durationEstimate);
+ }
+
+ this._onid3 = function(oID3PropNames,oID3Data) {
+ // oID3PropNames: string array (names)
+ // ID3Data: string array (data)
+ sm._writeDebug('SMSound()._onid3(): "'+this.sID+'" ID3 data received.');
+ var oData = [];
+ for (var i=0,j=oID3PropNames.length; i<j; i++) {
+ oData[oID3PropNames[i]] = oID3Data[i];
+ // sm._writeDebug(oID3PropNames[i]+': '+oID3Data[i]);
+ }
+ self.id3 = sm._mergeObjects(self.id3,oData);
+ if (self.options.onid3) self.options.onid3.apply(self);
+ }
+
+ this._whileplaying = function(nPosition) {
+ if (isNaN(nPosition) || nPosition == null) return false; // Flash may return NaN at times
+ self.position = nPosition;
+ if (self.playState == 1) {
+ if (self.options.whileplaying) self.options.whileplaying.apply(self); // flash may call after actual finish
+ if (self.loaded && self.options.onbeforefinish && self.options.onbeforefinishtime && !self.didBeforeFinish && self.duration-self.position <= self.options.onbeforefinishtime) {
+ sm._writeDebug('duration-position &lt;= onbeforefinishtime: '+self.duration+' - '+self.position+' &lt= '+self.options.onbeforefinishtime+' ('+(self.duration-self.position)+')');
+ self._onbeforefinish();
+ }
+ }
+ }
+
+ this._onload = function(bSuccess) {
+ bSuccess = (bSuccess==1?true:false);
+ sm._writeDebug('SMSound._onload(): "'+self.sID+'"'+(bSuccess?' loaded.':' failed to load (or loaded from cache - weird bug) - [<a href="'+self.url+'">test URL</a>]'));
+ self.loaded = bSuccess;
+ self.loadSuccess = bSuccess;
+ self.readyState = bSuccess?3:2;
+ if (self.options.onload) self.options.onload.apply(self);
+ }
+
+ this._onbeforefinish = function() {
+ if (!self.didBeforeFinish) {
+ self.didBeforeFinish = true;
+ if (self.options.onbeforefinish) self.options.onbeforefinish.apply(self);
+ }
+ }
+
+ this._onjustbeforefinish = function(msOffset) {
+ // msOffset: "end of sound" delay actual value (eg. 200 msec, value at event fire time was 187)
+ if (!self.didJustBeforeFinish) {
+ self.didJustBeforeFinish = true;
+ soundManager._writeDebug('SMSound._onjustbeforefinish()');
+ if (self.options.onjustbeforefinish) self.options.onjustbeforefinish.apply(self);;
+ }
+ }
+
+ this._onfinish = function() {
+ // sound has finished playing
+ sm._writeDebug('SMSound._onfinish(): "'+self.sID+'" finished playing');
+ self.playState = 0;
+ self.paused = false;
+ if (self.options.onfinish) self.options.onfinish.apply(self);
+ if (self.options.onbeforefinishcomplete) self.options.onbeforefinishcomplete.apply(self);
+ // reset some state items
+ self.setPosition(0);
+ self.didBeforeFinish = false;
+ self.didJustBeforeFinish = false;
+ }
+
+}
+
+var soundManager = new SoundManager();
+
+// attach onload handler
+if (window.addEventListener) {
+ window.addEventListener('load',soundManager.beginInit,false);
+ window.addEventListener('beforeunload',soundManager.destruct,false);
+} else if (window.attachEvent) {
+ window.attachEvent('onload',soundManager.beginInit);
+ window.attachEvent('beforeunload',soundManager.destruct);
+} else {
+ // no add/attachevent support - safe to assume no JS->Flash either.
+ soundManager.disable();
+} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.swf b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.swf
new file mode 100755
index 000000000..234a83343
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.swf
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebg.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebg.gif
new file mode 100644
index 000000000..909490511
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebg.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebottom.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebottom.gif
new file mode 100644
index 000000000..938a0795c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebottom.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluefooter.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluefooter.gif
new file mode 100644
index 000000000..6fe83f2c7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluefooter.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pretty.css
new file mode 100644
index 000000000..48b1657fd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pretty.css
@@ -0,0 +1,173 @@
+/* Blue Theme 2004 by Martin Hense ::: www.lounge7.de */
+
+/* Following are the presentation styles -- edit away!
+ Note that the 'body' font size may have to be changed if the resolution is
+ different than expected. */
+
+body {background: #000294 url(bluebottom.gif) right bottom no-repeat; color: #fff; font-size: 1.8em;}
+:link, :visited {text-decoration: none; color: #F8B73E;}
+h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;}
+ul, pre {margin: 0; line-height: 1em;}
+html, body {margin: 0; padding: 0;}
+
+blockquote, q {font-style: italic;}
+blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;}
+blockquote p {margin: 0;}
+blockquote i {font-style: normal;}
+blockquote b {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;}
+blockquote b i {font-style: italic;}
+
+kbd {font-weight: bold; font-size: 1em;}
+sup {font-size: smaller; line-height: 1px;}
+
+code {padding: 2px 0.25em; font-weight: bold; color: #AAABF8;}
+code.bad, code del {color: red;}
+code.old {color: silver;}
+pre {padding: 0; margin: 0.25em 0 0.5em 0.5em; color: #533; font-size: 90%;}
+pre code {display: block;}
+ul {margin-left: 5%; margin-right: 7%; list-style: disc;}
+li {margin-top: 0.75em; margin-right: 0;}
+ul ul {line-height: 1;}
+ul ul li {margin: .2em; font-size: 85%; list-style: square;}
+img.leader {display: block; margin: 0 auto;}
+
+div#header, div#footer {background: #005; color: #9183BF;
+ font-family: Verdana, Helvetica, sans-serif;}
+div#header {background: #005 url(bodybg.gif) -16px 0 no-repeat;
+ line-height: 1px;}
+div#footer {font-size: 0.5em; font-weight: bold; padding: 1em 0; height: 36px; border-top: 1px solid #08093F; background: #000136 url(bluefooter.gif) top right no-repeat; }
+#footer h1, #footer h2 {display: block; padding: 0 1em;}
+#footer h2 {font-style: italic;}
+
+div.long {font-size: 0.75em;}
+.slide {
+ font-family: georgia, Times, 'Times New Roman', serif;
+ background: transparent url(bluebg.gif) repeat-x;
+}
+.slide h1 {position: absolute; left: 87px; z-index: 1;
+ white-space: nowrap;
+ text-transform: capitalize;
+ top: 1em; width: 80%;
+ margin: 0 auto; text-align: center; padding: 0;
+ font: 150%/1em georgia, Times, 'Times New Roman', serif;
+ color: #fff; background: transparent;
+ }
+.slide h3 {font-size: 130%;}
+h1 abbr {font-variant: small-caps;}
+
+#currentSlide {text-align: center; font-size: 0.5em; color: #9183BF; font-family: Verdana, Helvetica, sans-serif;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 1.33em; padding: 0;
+ white-space: normal;
+ background: transparent;
+margin: 0 auto; width: 75%; text-align: center;
+ font: 2.5em Georgia, Times, 'Times New Roman', serif; height: 281px;
+ color: #fff;}
+#slide0 h3 {font-size: 1.5em;}
+#slide0 h4 {font-size: 1em;}
+#slide0 h3, #slide0 h4, #slide0 p {margin: 0; text-align: center; color: #fff;}
+#slide0 p {margin-top: 0.7em;}
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.notes {display: none;}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/blank.gif
new file mode 100644
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/bodybg.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/bodybg.gif
new file mode 100644
index 000000000..5f448a16f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/bodybg.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/framing.css
new file mode 100644
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/iepngfix.htc
new file mode 100644
index 000000000..4d90c87a9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'v11rc1/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/opera.css
new file mode 100644
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/outline.css
new file mode 100644
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pretty.css
new file mode 100644
index 000000000..f5c2666b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pretty.css
@@ -0,0 +1,156 @@
+/* Following are the presentation styles -- edit away! */
+
+body {background: #FFF url(bodybg.gif) -16px 0 no-repeat; color: #000; font-size: 2em;}
+:link, :visited {text-decoration: none; color: #00C;}
+#controls :active {color: #88A !important;}
+#controls :focus {outline: 1px dotted #227;}
+h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;}
+ul, pre {margin: 0; line-height: 1em;}
+html, body {margin: 0; padding: 0;}
+
+blockquote, q {font-style: italic;}
+blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;}
+blockquote p {margin: 0;}
+blockquote i {font-style: normal;}
+blockquote b {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;}
+blockquote b i {font-style: italic;}
+
+kbd {font-weight: bold; font-size: 1em;}
+sup {font-size: smaller; line-height: 1px;}
+
+.slide code {padding: 2px 0.25em; font-weight: bold; color: #533;}
+.slide code.bad, code del {color: red;}
+.slide code.old {color: silver;}
+.slide pre {padding: 0; margin: 0.25em 0 0.5em 0.5em; color: #533; font-size: 90%;}
+.slide pre code {display: block;}
+.slide ul {margin-left: 5%; margin-right: 7%; list-style: disc;}
+.slide li {margin-top: 0.75em; margin-right: 0;}
+.slide ul ul {line-height: 1;}
+.slide ul ul li {margin: .2em; font-size: 85%; list-style: square;}
+.slide img.leader {display: block; margin: 0 auto;}
+
+div#header, div#footer {background: #005; color: #AAB;
+ font-family: Verdana, Helvetica, sans-serif;}
+div#header {background: #005 url(bodybg.gif) -16px 0 no-repeat;
+ line-height: 1px;}
+div#footer {font-size: 0.5em; font-weight: bold; padding: 1em 0;}
+#footer h1, #footer h2 {display: block; padding: 0 1em;}
+#footer h2 {font-style: italic;}
+
+div.long {font-size: 0.75em;}
+.slide h1 {position: absolute; top: 0.7em; left: 87px; z-index: 1;
+ margin: 0; padding: 0.3em 0 0 50px; white-space: nowrap;
+ font: bold 150%/1em Helvetica, sans-serif; text-transform: capitalize;
+ color: #DDE; background: #005;}
+.slide h3 {font-size: 130%;}
+h1 abbr {font-variant: small-caps;}
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.note {display: none;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #77B;}
+
+.incremental, .incremental *, .incremental *:after {color: #DDE; visibility: visible;}
+img.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.note {display: none;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/print.css
new file mode 100644
index 000000000..e7a71d145
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul {page-break-inside: avoid; visibility: visible !important;} h1 {page-break-after: avoid;} body {font-size: 12pt; background: white;} * {color: black;} #slide0 h1 {font-size: 200%; border: none; margin: 0.5em 0 0.25em;} #slide0 h3 {margin: 0; padding: 0;} #slide0 h4 {margin: 0 0 0.5em; padding: 0;} #slide0 {margin-bottom: 3em;} h1 {border-top: 2pt solid gray; border-bottom: 1px dotted silver;} .extra {background: transparent !important;} div.extra, pre.extra, .example {font-size: 10pt; color: #333;} ul.extra a {font-weight: bold;} p.example {display: none;} #header {display: none;} #footer h1 {margin: 0; border-bottom: 1px solid; color: gray; font-style: italic;} #footer h2, #controls {display: none;} /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * {display: none !important;} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/s5-core.css
new file mode 100644
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.css
new file mode 100644
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/blank.gif
new file mode 100644
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/framing.css
new file mode 100644
index 000000000..74f0fdfba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 2em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/iepngfix.htc
new file mode 100644
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/logo.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/logo.png
new file mode 100644
index 000000000..653814eef
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/logo.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/opera.css
new file mode 100644
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/outline.css
new file mode 100644
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pretty.css
new file mode 100644
index 000000000..c004defcd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pretty.css
@@ -0,0 +1,163 @@
+/**
+ * Theme: dokuwiki
+ * @author Eric A. Meyer (http://meyerweb.com/) [default theme]
+ * @author Anika Henke <a.c.henke@arcor.de>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+body {background: #fff url(logo.png) top right no-repeat; color: #000; font-size: 1.9em;}
+:link, :visited {text-decoration: none; color: #436976;font-style:italic;}
+#controls :active {color: #436976 !important;}
+#controls :focus {outline: 1px dotted #436976;}
+h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;}
+ul, pre {margin: 0; line-height: 1em;}
+html, body {margin: 0; padding: 0; font-family: Verdana, Helvetica, sans-serif;}
+
+blockquote, q {font-style: italic;}
+blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;}
+blockquote p {margin: 0;}
+blockquote em {font-style: normal;}
+blockquote strong {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;}
+blockquote strong em {font-style: italic;}
+
+.slide code {padding: 2px 0.25em; font-weight: bold; color: #000;}
+.slide pre {padding: 0.5em; margin: 0.25em 0 0.5em 0.5em; color: #000; font-size: 80%;background:#dee7ec;border:1px dashed #8cacbb;}
+.slide ul {margin-left: 5%; margin-right: 7%; list-style: disc;}
+.slide li {margin-top: 0.75em; margin-right: 0;}
+.slide ul ul {line-height: 1;}
+.slide ul ul li {margin: .2em; font-size: 85%; list-style: square;}
+
+div#header, div#footer {background: #dee7ec; color: #000;
+ font-family: Verdana, Helvetica, sans-serif;}
+div#header {background: #dee7ec url(logo.png) top right no-repeat;
+ line-height: 1px;}
+div#footer {font-size: 0.5em; font-weight: bold; padding: 1em 0;border-top:1px solid #8cacbb;}
+#footer h1, #footer h2 {display: block; padding: 0 1em;}
+#footer h2 {font-style: italic;}
+
+div.long {font-size: 0.75em;}
+.slide h1 {position: absolute; top: 0.1em; left: 1.5%; z-index: 1;
+ margin: 0; padding: 0.3em 0 0 25px; white-space: nowrap;
+ font: bold 150%/1em Verdana, Helvetica, sans-serif;
+ color: #436976; background: inherit;}
+.slide h2 {font-size: 140%;}
+.slide h3 {font-size: 130%;}
+h1 abbr {font-variant: small-caps;}
+
+#currentSlide {text-align: center; font-size: 0.5em; color: #436976;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0;
+ font: bold 2em Verdana, Helvetica, sans-serif; white-space: normal;
+ color: #436976; background: transparent;
+ /*letter-spacing:0.25em; border-bottom:2px dashed #f90;border-right:2px dashed #f90;*/}
+#slide0 h2 {font: bold 1.5em Verdana, Helvetica, sans-serif; margin: 0.25em;
+ color: #638c9c; background: transparent;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+
+img{border: none;}
+
+ul li {list-style-type: square}
+li {color: #436976; font-weight: bold; }
+li div.li {color: #000; font-weight:normal; }
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.notes {display: none;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/print.css
new file mode 100644
index 000000000..e7a71d145
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul {page-break-inside: avoid; visibility: visible !important;} h1 {page-break-after: avoid;} body {font-size: 12pt; background: white;} * {color: black;} #slide0 h1 {font-size: 200%; border: none; margin: 0.5em 0 0.25em;} #slide0 h3 {margin: 0; padding: 0;} #slide0 h4 {margin: 0 0 0.5em; padding: 0;} #slide0 {margin-bottom: 3em;} h1 {border-top: 2pt solid gray; border-bottom: 1px dotted silver;} .extra {background: transparent !important;} div.extra, pre.extra, .example {font-size: 10pt; color: #333;} ul.extra a {font-weight: bold;} p.example {display: none;} #header {display: none;} #footer h1 {margin: 0; border-bottom: 1px solid; color: gray; font-style: italic;} #footer h2, #controls {display: none;} /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * {display: none !important;} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/s5-core.css
new file mode 100644
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.css
new file mode 100644
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/MIT-LICENSE b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/MIT-LICENSE
new file mode 100644
index 000000000..6d1340dbc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/MIT-LICENSE
@@ -0,0 +1,20 @@
+Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/builder.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/builder.js
new file mode 100644
index 000000000..53ea36f64
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/builder.js
@@ -0,0 +1,136 @@
+// script.aculo.us builder.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
+
+// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+var Builder = {
+ NODEMAP: {
+ AREA: 'map',
+ CAPTION: 'table',
+ COL: 'table',
+ COLGROUP: 'table',
+ LEGEND: 'fieldset',
+ OPTGROUP: 'select',
+ OPTION: 'select',
+ PARAM: 'object',
+ TBODY: 'table',
+ TD: 'table',
+ TFOOT: 'table',
+ TH: 'table',
+ THEAD: 'table',
+ TR: 'table'
+ },
+ // note: For Firefox < 1.5, OPTION and OPTGROUP tags are currently broken,
+ // due to a Firefox bug
+ node: function(elementName) {
+ elementName = elementName.toUpperCase();
+
+ // try innerHTML approach
+ var parentTag = this.NODEMAP[elementName] || 'div';
+ var parentElement = document.createElement(parentTag);
+ try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
+ parentElement.innerHTML = "<" + elementName + "></" + elementName + ">";
+ } catch(e) {}
+ var element = parentElement.firstChild || null;
+
+ // see if browser added wrapping tags
+ if(element && (element.tagName.toUpperCase() != elementName))
+ element = element.getElementsByTagName(elementName)[0];
+
+ // fallback to createElement approach
+ if(!element) element = document.createElement(elementName);
+
+ // abort if nothing could be created
+ if(!element) return;
+
+ // attributes (or text)
+ if(arguments[1])
+ if(this._isStringOrNumber(arguments[1]) ||
+ (arguments[1] instanceof Array) ||
+ arguments[1].tagName) {
+ this._children(element, arguments[1]);
+ } else {
+ var attrs = this._attributes(arguments[1]);
+ if(attrs.length) {
+ try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
+ parentElement.innerHTML = "<" +elementName + " " +
+ attrs + "></" + elementName + ">";
+ } catch(e) {}
+ element = parentElement.firstChild || null;
+ // workaround firefox 1.0.X bug
+ if(!element) {
+ element = document.createElement(elementName);
+ for(attr in arguments[1])
+ element[attr == 'class' ? 'className' : attr] = arguments[1][attr];
+ }
+ if(element.tagName.toUpperCase() != elementName)
+ element = parentElement.getElementsByTagName(elementName)[0];
+ }
+ }
+
+ // text, or array of children
+ if(arguments[2])
+ this._children(element, arguments[2]);
+
+ return DOKUid(element);
+ },
+ _text: function(text) {
+ return document.createTextNode(text);
+ },
+
+ ATTR_MAP: {
+ 'className': 'class',
+ 'htmlFor': 'for'
+ },
+
+ _attributes: function(attributes) {
+ var attrs = [];
+ for(attribute in attributes)
+ attrs.push((attribute in this.ATTR_MAP ? this.ATTR_MAP[attribute] : attribute) +
+ '="' + attributes[attribute].toString().escapeHTML().gsub(/"/,'&quot;') + '"');
+ return attrs.join(" ");
+ },
+ _children: function(element, children) {
+ if(children.tagName) {
+ element.appendChild(children);
+ return;
+ }
+ if(typeof children=='object') { // array can hold nodes and text
+ children.flatten().each( function(e) {
+ if(typeof e=='object')
+ element.appendChild(e);
+ else
+ if(Builder._isStringOrNumber(e))
+ element.appendChild(Builder._text(e));
+ });
+ } else
+ if(Builder._isStringOrNumber(children))
+ element.appendChild(Builder._text(children));
+ },
+ _isStringOrNumber: function(param) {
+ return(typeof param=='string' || typeof param=='number');
+ },
+ build: function(html) {
+ var element = this.node('div');
+ DOKUid(element).update(html.strip());
+ return element.down();
+ },
+ dump: function(scope) {
+ if(typeof scope != 'object' && typeof scope != 'function') scope = window; //global scope
+
+ var tags = ("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY " +
+ "BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET " +
+ "FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX "+
+ "KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P "+
+ "PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD "+
+ "TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/);
+
+ tags.each( function(tag){
+ scope[tag] = function() {
+ return Builder.node.apply(Builder, [tag].concat($A(arguments)));
+ };
+ });
+ }
+}; \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/controls.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/controls.js
new file mode 100644
index 000000000..eb9c4c08a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/controls.js
@@ -0,0 +1,965 @@
+// script.aculo.us controls.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
+
+// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+// (c) 2005-2009 Ivan Krstic (http://blogs.law.harvard.edu/ivan)
+// (c) 2005-2009 Jon Tirsen (http://www.tirsen.com)
+// Contributors:
+// Richard Livsey
+// Rahul Bhargava
+// Rob Wills
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+// Autocompleter.Base handles all the autocompletion functionality
+// that's independent of the data source for autocompletion. This
+// includes drawing the autocompletion menu, observing keyboard
+// and mouse events, and similar.
+//
+// Specific autocompleters need to provide, at the very least,
+// a getUpdatedChoices function that will be invoked every time
+// the text inside the monitored textbox changes. This method
+// should get the text for which to provide autocompletion by
+// invoking this.getToken(), NOT by directly accessing
+// this.element.value. This is to allow incremental tokenized
+// autocompletion. Specific auto-completion logic (AJAX, etc)
+// belongs in getUpdatedChoices.
+//
+// Tokenized incremental autocompletion is enabled automatically
+// when an autocompleter is instantiated with the 'tokens' option
+// in the options parameter, e.g.:
+// new Ajax.Autocompleter('id','upd', '/url/', { tokens: ',' });
+// will incrementally autocomplete with a comma as the token.
+// Additionally, ',' in the above example can be replaced with
+// a token array, e.g. { tokens: [',', '\n'] } which
+// enables autocompletion on multiple tokens. This is most
+// useful when one of the tokens is \n (a newline), as it
+// allows smart autocompletion after linebreaks.
+
+if(typeof Effect == 'undefined')
+ throw("controls.js requires including script.aculo.us' effects.js library");
+
+var Autocompleter = { };
+Autocompleter.Base = Class.create({
+ baseInitialize: function(element, update, options) {
+ element = DOKUid(element);
+ this.element = element;
+ this.update = DOKUid(update);
+ this.hasFocus = false;
+ this.changed = false;
+ this.active = false;
+ this.index = 0;
+ this.entryCount = 0;
+ this.oldElementValue = this.element.value;
+
+ if(this.setOptions)
+ this.setOptions(options);
+ else
+ this.options = options || { };
+
+ this.options.paramName = this.options.paramName || this.element.name;
+ this.options.tokens = this.options.tokens || [];
+ this.options.frequency = this.options.frequency || 0.4;
+ this.options.minChars = this.options.minChars || 1;
+ this.options.onShow = this.options.onShow ||
+ function(element, update){
+ if(!update.style.position || update.style.position=='absolute') {
+ update.style.position = 'absolute';
+ Position.clone(element, update, {
+ setHeight: false,
+ offsetTop: element.offsetHeight
+ });
+ }
+ Effect.Appear(update,{duration:0.15});
+ };
+ this.options.onHide = this.options.onHide ||
+ function(element, update){ new Effect.Fade(update,{duration:0.15}) };
+
+ if(typeof(this.options.tokens) == 'string')
+ this.options.tokens = new Array(this.options.tokens);
+ // Force carriage returns as token delimiters anyway
+ if (!this.options.tokens.include('\n'))
+ this.options.tokens.push('\n');
+
+ this.observer = null;
+
+ this.element.setAttribute('autocomplete','off');
+
+ Element.hide(this.update);
+
+ Event.observe(this.element, 'blur', this.onBlur.bindAsEventListener(this));
+ Event.observe(this.element, 'keydown', this.onKeyPress.bindAsEventListener(this));
+ },
+
+ show: function() {
+ if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update);
+ if(!this.iefix &&
+ (Prototype.Browser.IE) &&
+ (Element.getStyle(this.update, 'position')=='absolute')) {
+ new Insertion.After(this.update,
+ '<iframe id="' + this.update.id + '_iefix" '+
+ 'style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" ' +
+ 'src="javascript:false;" frameborder="0" scrolling="no"></iframe>');
+ this.iefix = DOKUid(this.update.id+'_iefix');
+ }
+ if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50);
+ },
+
+ fixIEOverlapping: function() {
+ Position.clone(this.update, this.iefix, {setTop:(!this.update.style.height)});
+ this.iefix.style.zIndex = 1;
+ this.update.style.zIndex = 2;
+ Element.show(this.iefix);
+ },
+
+ hide: function() {
+ this.stopIndicator();
+ if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update);
+ if(this.iefix) Element.hide(this.iefix);
+ },
+
+ startIndicator: function() {
+ if(this.options.indicator) Element.show(this.options.indicator);
+ },
+
+ stopIndicator: function() {
+ if(this.options.indicator) Element.hide(this.options.indicator);
+ },
+
+ onKeyPress: function(event) {
+ if(this.active)
+ switch(event.keyCode) {
+ case Event.KEY_TAB:
+ case Event.KEY_RETURN:
+ this.selectEntry();
+ Event.stop(event);
+ case Event.KEY_ESC:
+ this.hide();
+ this.active = false;
+ Event.stop(event);
+ return;
+ case Event.KEY_LEFT:
+ case Event.KEY_RIGHT:
+ return;
+ case Event.KEY_UP:
+ this.markPrevious();
+ this.render();
+ Event.stop(event);
+ return;
+ case Event.KEY_DOWN:
+ this.markNext();
+ this.render();
+ Event.stop(event);
+ return;
+ }
+ else
+ if(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN ||
+ (Prototype.Browser.WebKit > 0 && event.keyCode == 0)) return;
+
+ this.changed = true;
+ this.hasFocus = true;
+
+ if(this.observer) clearTimeout(this.observer);
+ this.observer =
+ setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000);
+ },
+
+ activate: function() {
+ this.changed = false;
+ this.hasFocus = true;
+ this.getUpdatedChoices();
+ },
+
+ onHover: function(event) {
+ var element = Event.findElement(event, 'LI');
+ if(this.index != element.autocompleteIndex)
+ {
+ this.index = element.autocompleteIndex;
+ this.render();
+ }
+ Event.stop(event);
+ },
+
+ onClick: function(event) {
+ var element = Event.findElement(event, 'LI');
+ this.index = element.autocompleteIndex;
+ this.selectEntry();
+ this.hide();
+ },
+
+ onBlur: function(event) {
+ // needed to make click events working
+ setTimeout(this.hide.bind(this), 250);
+ this.hasFocus = false;
+ this.active = false;
+ },
+
+ render: function() {
+ if(this.entryCount > 0) {
+ for (var i = 0; i < this.entryCount; i++)
+ this.index==i ?
+ Element.addClassName(this.getEntry(i),"selected") :
+ Element.removeClassName(this.getEntry(i),"selected");
+ if(this.hasFocus) {
+ this.show();
+ this.active = true;
+ }
+ } else {
+ this.active = false;
+ this.hide();
+ }
+ },
+
+ markPrevious: function() {
+ if(this.index > 0) this.index--;
+ else this.index = this.entryCount-1;
+ this.getEntry(this.index).scrollIntoView(true);
+ },
+
+ markNext: function() {
+ if(this.index < this.entryCount-1) this.index++;
+ else this.index = 0;
+ this.getEntry(this.index).scrollIntoView(false);
+ },
+
+ getEntry: function(index) {
+ return this.update.firstChild.childNodes[index];
+ },
+
+ getCurrentEntry: function() {
+ return this.getEntry(this.index);
+ },
+
+ selectEntry: function() {
+ this.active = false;
+ this.updateElement(this.getCurrentEntry());
+ },
+
+ updateElement: function(selectedElement) {
+ if (this.options.updateElement) {
+ this.options.updateElement(selectedElement);
+ return;
+ }
+ var value = '';
+ if (this.options.select) {
+ var nodes = DOKUid(selectedElement).select('.' + this.options.select) || [];
+ if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select);
+ } else
+ value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal');
+
+ var bounds = this.getTokenBounds();
+ if (bounds[0] != -1) {
+ var newValue = this.element.value.substr(0, bounds[0]);
+ var whitespace = this.element.value.substr(bounds[0]).match(/^\s+/);
+ if (whitespace)
+ newValue += whitespace[0];
+ this.element.value = newValue + value + this.element.value.substr(bounds[1]);
+ } else {
+ this.element.value = value;
+ }
+ this.oldElementValue = this.element.value;
+ this.element.focus();
+
+ if (this.options.afterUpdateElement)
+ this.options.afterUpdateElement(this.element, selectedElement);
+ },
+
+ updateChoices: function(choices) {
+ if(!this.changed && this.hasFocus) {
+ this.update.innerHTML = choices;
+ Element.cleanWhitespace(this.update);
+ Element.cleanWhitespace(this.update.down());
+
+ if(this.update.firstChild && this.update.down().childNodes) {
+ this.entryCount =
+ this.update.down().childNodes.length;
+ for (var i = 0; i < this.entryCount; i++) {
+ var entry = this.getEntry(i);
+ entry.autocompleteIndex = i;
+ this.addObservers(entry);
+ }
+ } else {
+ this.entryCount = 0;
+ }
+
+ this.stopIndicator();
+ this.index = 0;
+
+ if(this.entryCount==1 && this.options.autoSelect) {
+ this.selectEntry();
+ this.hide();
+ } else {
+ this.render();
+ }
+ }
+ },
+
+ addObservers: function(element) {
+ Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this));
+ Event.observe(element, "click", this.onClick.bindAsEventListener(this));
+ },
+
+ onObserverEvent: function() {
+ this.changed = false;
+ this.tokenBounds = null;
+ if(this.getToken().length>=this.options.minChars) {
+ this.getUpdatedChoices();
+ } else {
+ this.active = false;
+ this.hide();
+ }
+ this.oldElementValue = this.element.value;
+ },
+
+ getToken: function() {
+ var bounds = this.getTokenBounds();
+ return this.element.value.substring(bounds[0], bounds[1]).strip();
+ },
+
+ getTokenBounds: function() {
+ if (null != this.tokenBounds) return this.tokenBounds;
+ var value = this.element.value;
+ if (value.strip().empty()) return [-1, 0];
+ var diff = arguments.callee.getFirstDifferencePos(value, this.oldElementValue);
+ var offset = (diff == this.oldElementValue.length ? 1 : 0);
+ var prevTokenPos = -1, nextTokenPos = value.length;
+ var tp;
+ for (var index = 0, l = this.options.tokens.length; index < l; ++index) {
+ tp = value.lastIndexOf(this.options.tokens[index], diff + offset - 1);
+ if (tp > prevTokenPos) prevTokenPos = tp;
+ tp = value.indexOf(this.options.tokens[index], diff + offset);
+ if (-1 != tp && tp < nextTokenPos) nextTokenPos = tp;
+ }
+ return (this.tokenBounds = [prevTokenPos + 1, nextTokenPos]);
+ }
+});
+
+Autocompleter.Base.prototype.getTokenBounds.getFirstDifferencePos = function(newS, oldS) {
+ var boundary = Math.min(newS.length, oldS.length);
+ for (var index = 0; index < boundary; ++index)
+ if (newS[index] != oldS[index])
+ return index;
+ return boundary;
+};
+
+Ajax.Autocompleter = Class.create(Autocompleter.Base, {
+ initialize: function(element, update, url, options) {
+ this.baseInitialize(element, update, options);
+ this.options.asynchronous = true;
+ this.options.onComplete = this.onComplete.bind(this);
+ this.options.defaultParams = this.options.parameters || null;
+ this.url = url;
+ },
+
+ getUpdatedChoices: function() {
+ this.startIndicator();
+
+ var entry = encodeURIComponent(this.options.paramName) + '=' +
+ encodeURIComponent(this.getToken());
+
+ this.options.parameters = this.options.callback ?
+ this.options.callback(this.element, entry) : entry;
+
+ if(this.options.defaultParams)
+ this.options.parameters += '&' + this.options.defaultParams;
+
+ new Ajax.Request(this.url, this.options);
+ },
+
+ onComplete: function(request) {
+ this.updateChoices(request.responseText);
+ }
+});
+
+// The local array autocompleter. Used when you'd prefer to
+// inject an array of autocompletion options into the page, rather
+// than sending out Ajax queries, which can be quite slow sometimes.
+//
+// The constructor takes four parameters. The first two are, as usual,
+// the id of the monitored textbox, and id of the autocompletion menu.
+// The third is the array you want to autocomplete from, and the fourth
+// is the options block.
+//
+// Extra local autocompletion options:
+// - choices - How many autocompletion choices to offer
+//
+// - partialSearch - If false, the autocompleter will match entered
+// text only at the beginning of strings in the
+// autocomplete array. Defaults to true, which will
+// match text at the beginning of any *word* in the
+// strings in the autocomplete array. If you want to
+// search anywhere in the string, additionally set
+// the option fullSearch to true (default: off).
+//
+// - fullSsearch - Search anywhere in autocomplete array strings.
+//
+// - partialChars - How many characters to enter before triggering
+// a partial match (unlike minChars, which defines
+// how many characters are required to do any match
+// at all). Defaults to 2.
+//
+// - ignoreCase - Whether to ignore case when autocompleting.
+// Defaults to true.
+//
+// It's possible to pass in a custom function as the 'selector'
+// option, if you prefer to write your own autocompletion logic.
+// In that case, the other options above will not apply unless
+// you support them.
+
+Autocompleter.Local = Class.create(Autocompleter.Base, {
+ initialize: function(element, update, array, options) {
+ this.baseInitialize(element, update, options);
+ this.options.array = array;
+ },
+
+ getUpdatedChoices: function() {
+ this.updateChoices(this.options.selector(this));
+ },
+
+ setOptions: function(options) {
+ this.options = Object.extend({
+ choices: 10,
+ partialSearch: true,
+ partialChars: 2,
+ ignoreCase: true,
+ fullSearch: false,
+ selector: function(instance) {
+ var ret = []; // Beginning matches
+ var partial = []; // Inside matches
+ var entry = instance.getToken();
+ var count = 0;
+
+ for (var i = 0; i < instance.options.array.length &&
+ ret.length < instance.options.choices ; i++) {
+
+ var elem = instance.options.array[i];
+ var foundPos = instance.options.ignoreCase ?
+ elem.toLowerCase().indexOf(entry.toLowerCase()) :
+ elem.indexOf(entry);
+
+ while (foundPos != -1) {
+ if (foundPos == 0 && elem.length != entry.length) {
+ ret.push("<li><strong>" + elem.substr(0, entry.length) + "</strong>" +
+ elem.substr(entry.length) + "</li>");
+ break;
+ } else if (entry.length >= instance.options.partialChars &&
+ instance.options.partialSearch && foundPos != -1) {
+ if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) {
+ partial.push("<li>" + elem.substr(0, foundPos) + "<strong>" +
+ elem.substr(foundPos, entry.length) + "</strong>" + elem.substr(
+ foundPos + entry.length) + "</li>");
+ break;
+ }
+ }
+
+ foundPos = instance.options.ignoreCase ?
+ elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) :
+ elem.indexOf(entry, foundPos + 1);
+
+ }
+ }
+ if (partial.length)
+ ret = ret.concat(partial.slice(0, instance.options.choices - ret.length));
+ return "<ul>" + ret.join('') + "</ul>";
+ }
+ }, options || { });
+ }
+});
+
+// AJAX in-place editor and collection editor
+// Full rewrite by Christophe Porteneuve <tdd@tddsworld.com> (April 2007).
+
+// Use this if you notice weird scrolling problems on some browsers,
+// the DOM might be a bit confused when this gets called so do this
+// waits 1 ms (with setTimeout) until it does the activation
+Field.scrollFreeActivate = function(field) {
+ setTimeout(function() {
+ Field.activate(field);
+ }, 1);
+};
+
+Ajax.InPlaceEditor = Class.create({
+ initialize: function(element, url, options) {
+ this.url = url;
+ this.element = element = DOKUid(element);
+ this.prepareOptions();
+ this._controls = { };
+ arguments.callee.dealWithDeprecatedOptions(options); // DEPRECATION LAYER!!!
+ Object.extend(this.options, options || { });
+ if (!this.options.formId && this.element.id) {
+ this.options.formId = this.element.id + '-inplaceeditor';
+ if (DOKUid(this.options.formId))
+ this.options.formId = '';
+ }
+ if (this.options.externalControl)
+ this.options.externalControl = DOKUid(this.options.externalControl);
+ if (!this.options.externalControl)
+ this.options.externalControlOnly = false;
+ this._originalBackground = this.element.getStyle('background-color') || 'transparent';
+ this.element.title = this.options.clickToEditText;
+ this._boundCancelHandler = this.handleFormCancellation.bind(this);
+ this._boundComplete = (this.options.onComplete || Prototype.emptyFunction).bind(this);
+ this._boundFailureHandler = this.handleAJAXFailure.bind(this);
+ this._boundSubmitHandler = this.handleFormSubmission.bind(this);
+ this._boundWrapperHandler = this.wrapUp.bind(this);
+ this.registerListeners();
+ },
+ checkForEscapeOrReturn: function(e) {
+ if (!this._editing || e.ctrlKey || e.altKey || e.shiftKey) return;
+ if (Event.KEY_ESC == e.keyCode)
+ this.handleFormCancellation(e);
+ else if (Event.KEY_RETURN == e.keyCode)
+ this.handleFormSubmission(e);
+ },
+ createControl: function(mode, handler, extraClasses) {
+ var control = this.options[mode + 'Control'];
+ var text = this.options[mode + 'Text'];
+ if ('button' == control) {
+ var btn = document.createElement('input');
+ btn.type = 'submit';
+ btn.value = text;
+ btn.className = 'editor_' + mode + '_button';
+ if ('cancel' == mode)
+ btn.onclick = this._boundCancelHandler;
+ this._form.appendChild(btn);
+ this._controls[mode] = btn;
+ } else if ('link' == control) {
+ var link = document.createElement('a');
+ link.href = '#';
+ link.appendChild(document.createTextNode(text));
+ link.onclick = 'cancel' == mode ? this._boundCancelHandler : this._boundSubmitHandler;
+ link.className = 'editor_' + mode + '_link';
+ if (extraClasses)
+ link.className += ' ' + extraClasses;
+ this._form.appendChild(link);
+ this._controls[mode] = link;
+ }
+ },
+ createEditField: function() {
+ var text = (this.options.loadTextURL ? this.options.loadingText : this.getText());
+ var fld;
+ if (1 >= this.options.rows && !/\r|\n/.test(this.getText())) {
+ fld = document.createElement('input');
+ fld.type = 'text';
+ var size = this.options.size || this.options.cols || 0;
+ if (0 < size) fld.size = size;
+ } else {
+ fld = document.createElement('textarea');
+ fld.rows = (1 >= this.options.rows ? this.options.autoRows : this.options.rows);
+ fld.cols = this.options.cols || 40;
+ }
+ fld.name = this.options.paramName;
+ fld.value = text; // No HTML breaks conversion anymore
+ fld.className = 'editor_field';
+ if (this.options.submitOnBlur)
+ fld.onblur = this._boundSubmitHandler;
+ this._controls.editor = fld;
+ if (this.options.loadTextURL)
+ this.loadExternalText();
+ this._form.appendChild(this._controls.editor);
+ },
+ createForm: function() {
+ var ipe = this;
+ function addText(mode, condition) {
+ var text = ipe.options['text' + mode + 'Controls'];
+ if (!text || condition === false) return;
+ ipe._form.appendChild(document.createTextNode(text));
+ };
+ this._form = DOKUid(document.createElement('form'));
+ this._form.id = this.options.formId;
+ this._form.addClassName(this.options.formClassName);
+ this._form.onsubmit = this._boundSubmitHandler;
+ this.createEditField();
+ if ('textarea' == this._controls.editor.tagName.toLowerCase())
+ this._form.appendChild(document.createElement('br'));
+ if (this.options.onFormCustomization)
+ this.options.onFormCustomization(this, this._form);
+ addText('Before', this.options.okControl || this.options.cancelControl);
+ this.createControl('ok', this._boundSubmitHandler);
+ addText('Between', this.options.okControl && this.options.cancelControl);
+ this.createControl('cancel', this._boundCancelHandler, 'editor_cancel');
+ addText('After', this.options.okControl || this.options.cancelControl);
+ },
+ destroy: function() {
+ if (this._oldInnerHTML)
+ this.element.innerHTML = this._oldInnerHTML;
+ this.leaveEditMode();
+ this.unregisterListeners();
+ },
+ enterEditMode: function(e) {
+ if (this._saving || this._editing) return;
+ this._editing = true;
+ this.triggerCallback('onEnterEditMode');
+ if (this.options.externalControl)
+ this.options.externalControl.hide();
+ this.element.hide();
+ this.createForm();
+ this.element.parentNode.insertBefore(this._form, this.element);
+ if (!this.options.loadTextURL)
+ this.postProcessEditField();
+ if (e) Event.stop(e);
+ },
+ enterHover: function(e) {
+ if (this.options.hoverClassName)
+ this.element.addClassName(this.options.hoverClassName);
+ if (this._saving) return;
+ this.triggerCallback('onEnterHover');
+ },
+ getText: function() {
+ return this.element.innerHTML.unescapeHTML();
+ },
+ handleAJAXFailure: function(transport) {
+ this.triggerCallback('onFailure', transport);
+ if (this._oldInnerHTML) {
+ this.element.innerHTML = this._oldInnerHTML;
+ this._oldInnerHTML = null;
+ }
+ },
+ handleFormCancellation: function(e) {
+ this.wrapUp();
+ if (e) Event.stop(e);
+ },
+ handleFormSubmission: function(e) {
+ var form = this._form;
+ var value = $F(this._controls.editor);
+ this.prepareSubmission();
+ var params = this.options.callback(form, value) || '';
+ if (Object.isString(params))
+ params = params.toQueryParams();
+ params.editorId = this.element.id;
+ if (this.options.htmlResponse) {
+ var options = Object.extend({ evalScripts: true }, this.options.ajaxOptions);
+ Object.extend(options, {
+ parameters: params,
+ onComplete: this._boundWrapperHandler,
+ onFailure: this._boundFailureHandler
+ });
+ new Ajax.Updater({ success: this.element }, this.url, options);
+ } else {
+ var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
+ Object.extend(options, {
+ parameters: params,
+ onComplete: this._boundWrapperHandler,
+ onFailure: this._boundFailureHandler
+ });
+ new Ajax.Request(this.url, options);
+ }
+ if (e) Event.stop(e);
+ },
+ leaveEditMode: function() {
+ this.element.removeClassName(this.options.savingClassName);
+ this.removeForm();
+ this.leaveHover();
+ this.element.style.backgroundColor = this._originalBackground;
+ this.element.show();
+ if (this.options.externalControl)
+ this.options.externalControl.show();
+ this._saving = false;
+ this._editing = false;
+ this._oldInnerHTML = null;
+ this.triggerCallback('onLeaveEditMode');
+ },
+ leaveHover: function(e) {
+ if (this.options.hoverClassName)
+ this.element.removeClassName(this.options.hoverClassName);
+ if (this._saving) return;
+ this.triggerCallback('onLeaveHover');
+ },
+ loadExternalText: function() {
+ this._form.addClassName(this.options.loadingClassName);
+ this._controls.editor.disabled = true;
+ var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
+ Object.extend(options, {
+ parameters: 'editorId=' + encodeURIComponent(this.element.id),
+ onComplete: Prototype.emptyFunction,
+ onSuccess: function(transport) {
+ this._form.removeClassName(this.options.loadingClassName);
+ var text = transport.responseText;
+ if (this.options.stripLoadedTextTags)
+ text = text.stripTags();
+ this._controls.editor.value = text;
+ this._controls.editor.disabled = false;
+ this.postProcessEditField();
+ }.bind(this),
+ onFailure: this._boundFailureHandler
+ });
+ new Ajax.Request(this.options.loadTextURL, options);
+ },
+ postProcessEditField: function() {
+ var fpc = this.options.fieldPostCreation;
+ if (fpc)
+ DOKUid(this._controls.editor)['focus' == fpc ? 'focus' : 'activate']();
+ },
+ prepareOptions: function() {
+ this.options = Object.clone(Ajax.InPlaceEditor.DefaultOptions);
+ Object.extend(this.options, Ajax.InPlaceEditor.DefaultCallbacks);
+ [this._extraDefaultOptions].flatten().compact().each(function(defs) {
+ Object.extend(this.options, defs);
+ }.bind(this));
+ },
+ prepareSubmission: function() {
+ this._saving = true;
+ this.removeForm();
+ this.leaveHover();
+ this.showSaving();
+ },
+ registerListeners: function() {
+ this._listeners = { };
+ var listener;
+ $H(Ajax.InPlaceEditor.Listeners).each(function(pair) {
+ listener = this[pair.value].bind(this);
+ this._listeners[pair.key] = listener;
+ if (!this.options.externalControlOnly)
+ this.element.observe(pair.key, listener);
+ if (this.options.externalControl)
+ this.options.externalControl.observe(pair.key, listener);
+ }.bind(this));
+ },
+ removeForm: function() {
+ if (!this._form) return;
+ this._form.remove();
+ this._form = null;
+ this._controls = { };
+ },
+ showSaving: function() {
+ this._oldInnerHTML = this.element.innerHTML;
+ this.element.innerHTML = this.options.savingText;
+ this.element.addClassName(this.options.savingClassName);
+ this.element.style.backgroundColor = this._originalBackground;
+ this.element.show();
+ },
+ triggerCallback: function(cbName, arg) {
+ if ('function' == typeof this.options[cbName]) {
+ this.options[cbName](this, arg);
+ }
+ },
+ unregisterListeners: function() {
+ $H(this._listeners).each(function(pair) {
+ if (!this.options.externalControlOnly)
+ this.element.stopObserving(pair.key, pair.value);
+ if (this.options.externalControl)
+ this.options.externalControl.stopObserving(pair.key, pair.value);
+ }.bind(this));
+ },
+ wrapUp: function(transport) {
+ this.leaveEditMode();
+ // Can't use triggerCallback due to backward compatibility: requires
+ // binding + direct element
+ this._boundComplete(transport, this.element);
+ }
+});
+
+Object.extend(Ajax.InPlaceEditor.prototype, {
+ dispose: Ajax.InPlaceEditor.prototype.destroy
+});
+
+Ajax.InPlaceCollectionEditor = Class.create(Ajax.InPlaceEditor, {
+ initialize: function($super, element, url, options) {
+ this._extraDefaultOptions = Ajax.InPlaceCollectionEditor.DefaultOptions;
+ $super(element, url, options);
+ },
+
+ createEditField: function() {
+ var list = document.createElement('select');
+ list.name = this.options.paramName;
+ list.size = 1;
+ this._controls.editor = list;
+ this._collection = this.options.collection || [];
+ if (this.options.loadCollectionURL)
+ this.loadCollection();
+ else
+ this.checkForExternalText();
+ this._form.appendChild(this._controls.editor);
+ },
+
+ loadCollection: function() {
+ this._form.addClassName(this.options.loadingClassName);
+ this.showLoadingText(this.options.loadingCollectionText);
+ var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
+ Object.extend(options, {
+ parameters: 'editorId=' + encodeURIComponent(this.element.id),
+ onComplete: Prototype.emptyFunction,
+ onSuccess: function(transport) {
+ var js = transport.responseText.strip();
+ if (!/^\[.*\]$/.test(js)) // TODO: improve sanity check
+ throw('Server returned an invalid collection representation.');
+ this._collection = eval(js);
+ this.checkForExternalText();
+ }.bind(this),
+ onFailure: this.onFailure
+ });
+ new Ajax.Request(this.options.loadCollectionURL, options);
+ },
+
+ showLoadingText: function(text) {
+ this._controls.editor.disabled = true;
+ var tempOption = this._controls.editor.firstChild;
+ if (!tempOption) {
+ tempOption = document.createElement('option');
+ tempOption.value = '';
+ this._controls.editor.appendChild(tempOption);
+ tempOption.selected = true;
+ }
+ tempOption.update((text || '').stripScripts().stripTags());
+ },
+
+ checkForExternalText: function() {
+ this._text = this.getText();
+ if (this.options.loadTextURL)
+ this.loadExternalText();
+ else
+ this.buildOptionList();
+ },
+
+ loadExternalText: function() {
+ this.showLoadingText(this.options.loadingText);
+ var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
+ Object.extend(options, {
+ parameters: 'editorId=' + encodeURIComponent(this.element.id),
+ onComplete: Prototype.emptyFunction,
+ onSuccess: function(transport) {
+ this._text = transport.responseText.strip();
+ this.buildOptionList();
+ }.bind(this),
+ onFailure: this.onFailure
+ });
+ new Ajax.Request(this.options.loadTextURL, options);
+ },
+
+ buildOptionList: function() {
+ this._form.removeClassName(this.options.loadingClassName);
+ this._collection = this._collection.map(function(entry) {
+ return 2 === entry.length ? entry : [entry, entry].flatten();
+ });
+ var marker = ('value' in this.options) ? this.options.value : this._text;
+ var textFound = this._collection.any(function(entry) {
+ return entry[0] == marker;
+ }.bind(this));
+ this._controls.editor.update('');
+ var option;
+ this._collection.each(function(entry, index) {
+ option = document.createElement('option');
+ option.value = entry[0];
+ option.selected = textFound ? entry[0] == marker : 0 == index;
+ option.appendChild(document.createTextNode(entry[1]));
+ this._controls.editor.appendChild(option);
+ }.bind(this));
+ this._controls.editor.disabled = false;
+ Field.scrollFreeActivate(this._controls.editor);
+ }
+});
+
+//**** DEPRECATION LAYER FOR InPlace[Collection]Editor! ****
+//**** This only exists for a while, in order to let ****
+//**** users adapt to the new API. Read up on the new ****
+//**** API and convert your code to it ASAP! ****
+
+Ajax.InPlaceEditor.prototype.initialize.dealWithDeprecatedOptions = function(options) {
+ if (!options) return;
+ function fallback(name, expr) {
+ if (name in options || expr === undefined) return;
+ options[name] = expr;
+ };
+ fallback('cancelControl', (options.cancelLink ? 'link' : (options.cancelButton ? 'button' :
+ options.cancelLink == options.cancelButton == false ? false : undefined)));
+ fallback('okControl', (options.okLink ? 'link' : (options.okButton ? 'button' :
+ options.okLink == options.okButton == false ? false : undefined)));
+ fallback('highlightColor', options.highlightcolor);
+ fallback('highlightEndColor', options.highlightendcolor);
+};
+
+Object.extend(Ajax.InPlaceEditor, {
+ DefaultOptions: {
+ ajaxOptions: { },
+ autoRows: 3, // Use when multi-line w/ rows == 1
+ cancelControl: 'link', // 'link'|'button'|false
+ cancelText: 'cancel',
+ clickToEditText: 'Click to edit',
+ externalControl: null, // id|elt
+ externalControlOnly: false,
+ fieldPostCreation: 'activate', // 'activate'|'focus'|false
+ formClassName: 'inplaceeditor-form',
+ formId: null, // id|elt
+ highlightColor: '#ffff99',
+ highlightEndColor: '#ffffff',
+ hoverClassName: '',
+ htmlResponse: true,
+ loadingClassName: 'inplaceeditor-loading',
+ loadingText: 'Loading...',
+ okControl: 'button', // 'link'|'button'|false
+ okText: 'ok',
+ paramName: 'value',
+ rows: 1, // If 1 and multi-line, uses autoRows
+ savingClassName: 'inplaceeditor-saving',
+ savingText: 'Saving...',
+ size: 0,
+ stripLoadedTextTags: false,
+ submitOnBlur: false,
+ textAfterControls: '',
+ textBeforeControls: '',
+ textBetweenControls: ''
+ },
+ DefaultCallbacks: {
+ callback: function(form) {
+ return Form.serialize(form);
+ },
+ onComplete: function(transport, element) {
+ // For backward compatibility, this one is bound to the IPE, and passes
+ // the element directly. It was too often customized, so we don't break it.
+ new Effect.Highlight(element, {
+ startcolor: this.options.highlightColor, keepBackgroundImage: true });
+ },
+ onEnterEditMode: null,
+ onEnterHover: function(ipe) {
+ ipe.element.style.backgroundColor = ipe.options.highlightColor;
+ if (ipe._effect)
+ ipe._effect.cancel();
+ },
+ onFailure: function(transport, ipe) {
+ alert('Error communication with the server: ' + transport.responseText.stripTags());
+ },
+ onFormCustomization: null, // Takes the IPE and its generated form, after editor, before controls.
+ onLeaveEditMode: null,
+ onLeaveHover: function(ipe) {
+ ipe._effect = new Effect.Highlight(ipe.element, {
+ startcolor: ipe.options.highlightColor, endcolor: ipe.options.highlightEndColor,
+ restorecolor: ipe._originalBackground, keepBackgroundImage: true
+ });
+ }
+ },
+ Listeners: {
+ click: 'enterEditMode',
+ keydown: 'checkForEscapeOrReturn',
+ mouseover: 'enterHover',
+ mouseout: 'leaveHover'
+ }
+});
+
+Ajax.InPlaceCollectionEditor.DefaultOptions = {
+ loadingCollectionText: 'Loading options...'
+};
+
+// Delayed observer, like Form.Element.Observer,
+// but waits for delay after last key input
+// Ideal for live-search fields
+
+Form.Element.DelayedObserver = Class.create({
+ initialize: function(element, delay, callback) {
+ this.delay = delay || 0.5;
+ this.element = DOKUid(element);
+ this.callback = callback;
+ this.timer = null;
+ this.lastValue = $F(this.element);
+ Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this));
+ },
+ delayedListener: function(event) {
+ if(this.lastValue == $F(this.element)) return;
+ if(this.timer) clearTimeout(this.timer);
+ this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000);
+ this.lastValue = $F(this.element);
+ },
+ onTimerEvent: function() {
+ this.timer = null;
+ this.callback(this.element, $F(this.element));
+ }
+}); \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/dragdrop.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/dragdrop.js
new file mode 100644
index 000000000..6e3a1f872
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/dragdrop.js
@@ -0,0 +1,974 @@
+// script.aculo.us dragdrop.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
+
+// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+if(Object.isUndefined(Effect))
+ throw("dragdrop.js requires including script.aculo.us' effects.js library");
+
+var Droppables = {
+ drops: [],
+
+ remove: function(element) {
+ this.drops = this.drops.reject(function(d) { return d.element==DOKUid(element) });
+ },
+
+ add: function(element) {
+ element = DOKUid(element);
+ var options = Object.extend({
+ greedy: true,
+ hoverclass: null,
+ tree: false
+ }, arguments[1] || { });
+
+ // cache containers
+ if(options.containment) {
+ options._containers = [];
+ var containment = options.containment;
+ if(Object.isArray(containment)) {
+ containment.each( function(c) { options._containers.push(DOKUid(c)) });
+ } else {
+ options._containers.push(DOKUid(containment));
+ }
+ }
+
+ if(options.accept) options.accept = [options.accept].flatten();
+
+ Element.makePositioned(element); // fix IE
+ options.element = element;
+
+ this.drops.push(options);
+ },
+
+ findDeepestChild: function(drops) {
+ deepest = drops[0];
+
+ for (i = 1; i < drops.length; ++i)
+ if (Element.isParent(drops[i].element, deepest.element))
+ deepest = drops[i];
+
+ return deepest;
+ },
+
+ isContained: function(element, drop) {
+ var containmentNode;
+ if(drop.tree) {
+ containmentNode = element.treeNode;
+ } else {
+ containmentNode = element.parentNode;
+ }
+ return drop._containers.detect(function(c) { return containmentNode == c });
+ },
+
+ isAffected: function(point, element, drop) {
+ return (
+ (drop.element!=element) &&
+ ((!drop._containers) ||
+ this.isContained(element, drop)) &&
+ ((!drop.accept) ||
+ (Element.classNames(element).detect(
+ function(v) { return drop.accept.include(v) } ) )) &&
+ Position.within(drop.element, point[0], point[1]) );
+ },
+
+ deactivate: function(drop) {
+ if(drop.hoverclass)
+ Element.removeClassName(drop.element, drop.hoverclass);
+ this.last_active = null;
+ },
+
+ activate: function(drop) {
+ if(drop.hoverclass)
+ Element.addClassName(drop.element, drop.hoverclass);
+ this.last_active = drop;
+ },
+
+ show: function(point, element) {
+ if(!this.drops.length) return;
+ var drop, affected = [];
+
+ this.drops.each( function(drop) {
+ if(Droppables.isAffected(point, element, drop))
+ affected.push(drop);
+ });
+
+ if(affected.length>0)
+ drop = Droppables.findDeepestChild(affected);
+
+ if(this.last_active && this.last_active != drop) this.deactivate(this.last_active);
+ if (drop) {
+ Position.within(drop.element, point[0], point[1]);
+ if(drop.onHover)
+ drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element));
+
+ if (drop != this.last_active) Droppables.activate(drop);
+ }
+ },
+
+ fire: function(event, element) {
+ if(!this.last_active) return;
+ Position.prepare();
+
+ if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active))
+ if (this.last_active.onDrop) {
+ this.last_active.onDrop(element, this.last_active.element, event);
+ return true;
+ }
+ },
+
+ reset: function() {
+ if(this.last_active)
+ this.deactivate(this.last_active);
+ }
+};
+
+var Draggables = {
+ drags: [],
+ observers: [],
+
+ register: function(draggable) {
+ if(this.drags.length == 0) {
+ this.eventMouseUp = this.endDrag.bindAsEventListener(this);
+ this.eventMouseMove = this.updateDrag.bindAsEventListener(this);
+ this.eventKeypress = this.keyPress.bindAsEventListener(this);
+
+ Event.observe(document, "mouseup", this.eventMouseUp);
+ Event.observe(document, "mousemove", this.eventMouseMove);
+ Event.observe(document, "keypress", this.eventKeypress);
+ }
+ this.drags.push(draggable);
+ },
+
+ unregister: function(draggable) {
+ this.drags = this.drags.reject(function(d) { return d==draggable });
+ if(this.drags.length == 0) {
+ Event.stopObserving(document, "mouseup", this.eventMouseUp);
+ Event.stopObserving(document, "mousemove", this.eventMouseMove);
+ Event.stopObserving(document, "keypress", this.eventKeypress);
+ }
+ },
+
+ activate: function(draggable) {
+ if(draggable.options.delay) {
+ this._timeout = setTimeout(function() {
+ Draggables._timeout = null;
+ window.focus();
+ Draggables.activeDraggable = draggable;
+ }.bind(this), draggable.options.delay);
+ } else {
+ window.focus(); // allows keypress events if window isn't currently focused, fails for Safari
+ this.activeDraggable = draggable;
+ }
+ },
+
+ deactivate: function() {
+ this.activeDraggable = null;
+ },
+
+ updateDrag: function(event) {
+ if(!this.activeDraggable) return;
+ var pointer = [Event.pointerX(event), Event.pointerY(event)];
+ // Mozilla-based browsers fire successive mousemove events with
+ // the same coordinates, prevent needless redrawing (moz bug?)
+ if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return;
+ this._lastPointer = pointer;
+
+ this.activeDraggable.updateDrag(event, pointer);
+ },
+
+ endDrag: function(event) {
+ if(this._timeout) {
+ clearTimeout(this._timeout);
+ this._timeout = null;
+ }
+ if(!this.activeDraggable) return;
+ this._lastPointer = null;
+ this.activeDraggable.endDrag(event);
+ this.activeDraggable = null;
+ },
+
+ keyPress: function(event) {
+ if(this.activeDraggable)
+ this.activeDraggable.keyPress(event);
+ },
+
+ addObserver: function(observer) {
+ this.observers.push(observer);
+ this._cacheObserverCallbacks();
+ },
+
+ removeObserver: function(element) { // element instead of observer fixes mem leaks
+ this.observers = this.observers.reject( function(o) { return o.element==element });
+ this._cacheObserverCallbacks();
+ },
+
+ notify: function(eventName, draggable, event) { // 'onStart', 'onEnd', 'onDrag'
+ if(this[eventName+'Count'] > 0)
+ this.observers.each( function(o) {
+ if(o[eventName]) o[eventName](eventName, draggable, event);
+ });
+ if(draggable.options[eventName]) draggable.options[eventName](draggable, event);
+ },
+
+ _cacheObserverCallbacks: function() {
+ ['onStart','onEnd','onDrag'].each( function(eventName) {
+ Draggables[eventName+'Count'] = Draggables.observers.select(
+ function(o) { return o[eventName]; }
+ ).length;
+ });
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+var Draggable = Class.create({
+ initialize: function(element) {
+ var defaults = {
+ handle: false,
+ reverteffect: function(element, top_offset, left_offset) {
+ var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;
+ new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur,
+ queue: {scope:'_draggable', position:'end'}
+ });
+ },
+ endeffect: function(element) {
+ var toOpacity = Object.isNumber(element._opacity) ? element._opacity : 1.0;
+ new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity,
+ queue: {scope:'_draggable', position:'end'},
+ afterFinish: function(){
+ Draggable._dragging[element] = false
+ }
+ });
+ },
+ zindex: 1000,
+ revert: false,
+ quiet: false,
+ scroll: false,
+ scrollSensitivity: 20,
+ scrollSpeed: 15,
+ snap: false, // false, or xy or [x,y] or function(x,y){ return [x,y] }
+ delay: 0
+ };
+
+ if(!arguments[1] || Object.isUndefined(arguments[1].endeffect))
+ Object.extend(defaults, {
+ starteffect: function(element) {
+ element._opacity = Element.getOpacity(element);
+ Draggable._dragging[element] = true;
+ new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7});
+ }
+ });
+
+ var options = Object.extend(defaults, arguments[1] || { });
+
+ this.element = DOKUid(element);
+
+ if(options.handle && Object.isString(options.handle))
+ this.handle = this.element.down('.'+options.handle, 0);
+
+ if(!this.handle) this.handle = DOKUid(options.handle);
+ if(!this.handle) this.handle = this.element;
+
+ if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) {
+ options.scroll = DOKUid(options.scroll);
+ this._isScrollChild = Element.childOf(this.element, options.scroll);
+ }
+
+ Element.makePositioned(this.element); // fix IE
+
+ this.options = options;
+ this.dragging = false;
+
+ this.eventMouseDown = this.initDrag.bindAsEventListener(this);
+ Event.observe(this.handle, "mousedown", this.eventMouseDown);
+
+ Draggables.register(this);
+ },
+
+ destroy: function() {
+ Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);
+ Draggables.unregister(this);
+ },
+
+ currentDelta: function() {
+ return([
+ parseInt(Element.getStyle(this.element,'left') || '0'),
+ parseInt(Element.getStyle(this.element,'top') || '0')]);
+ },
+
+ initDrag: function(event) {
+ if(!Object.isUndefined(Draggable._dragging[this.element]) &&
+ Draggable._dragging[this.element]) return;
+ if(Event.isLeftClick(event)) {
+ // abort on form elements, fixes a Firefox issue
+ var src = Event.element(event);
+ if((tag_name = src.tagName.toUpperCase()) && (
+ tag_name=='INPUT' ||
+ tag_name=='SELECT' ||
+ tag_name=='OPTION' ||
+ tag_name=='BUTTON' ||
+ tag_name=='TEXTAREA')) return;
+
+ var pointer = [Event.pointerX(event), Event.pointerY(event)];
+ var pos = this.element.cumulativeOffset();
+ this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) });
+
+ Draggables.activate(this);
+ Event.stop(event);
+ }
+ },
+
+ startDrag: function(event) {
+ this.dragging = true;
+ if(!this.delta)
+ this.delta = this.currentDelta();
+
+ if(this.options.zindex) {
+ this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0);
+ this.element.style.zIndex = this.options.zindex;
+ }
+
+ if(this.options.ghosting) {
+ this._clone = this.element.cloneNode(true);
+ this._originallyAbsolute = (this.element.getStyle('position') == 'absolute');
+ if (!this._originallyAbsolute)
+ Position.absolutize(this.element);
+ this.element.parentNode.insertBefore(this._clone, this.element);
+ }
+
+ if(this.options.scroll) {
+ if (this.options.scroll == window) {
+ var where = this._getWindowScroll(this.options.scroll);
+ this.originalScrollLeft = where.left;
+ this.originalScrollTop = where.top;
+ } else {
+ this.originalScrollLeft = this.options.scroll.scrollLeft;
+ this.originalScrollTop = this.options.scroll.scrollTop;
+ }
+ }
+
+ Draggables.notify('onStart', this, event);
+
+ if(this.options.starteffect) this.options.starteffect(this.element);
+ },
+
+ updateDrag: function(event, pointer) {
+ if(!this.dragging) this.startDrag(event);
+
+ if(!this.options.quiet){
+ Position.prepare();
+ Droppables.show(pointer, this.element);
+ }
+
+ Draggables.notify('onDrag', this, event);
+
+ this.draw(pointer);
+ if(this.options.change) this.options.change(this);
+
+ if(this.options.scroll) {
+ this.stopScrolling();
+
+ var p;
+ if (this.options.scroll == window) {
+ with(this._getWindowScroll(this.options.scroll)) { p = [ left, top, left+width, top+height ]; }
+ } else {
+ p = Position.page(this.options.scroll);
+ p[0] += this.options.scroll.scrollLeft + Position.deltaX;
+ p[1] += this.options.scroll.scrollTop + Position.deltaY;
+ p.push(p[0]+this.options.scroll.offsetWidth);
+ p.push(p[1]+this.options.scroll.offsetHeight);
+ }
+ var speed = [0,0];
+ if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[0]+this.options.scrollSensitivity);
+ if(pointer[1] < (p[1]+this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[1]+this.options.scrollSensitivity);
+ if(pointer[0] > (p[2]-this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[2]-this.options.scrollSensitivity);
+ if(pointer[1] > (p[3]-this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[3]-this.options.scrollSensitivity);
+ this.startScrolling(speed);
+ }
+
+ // fix AppleWebKit rendering
+ if(Prototype.Browser.WebKit) window.scrollBy(0,0);
+
+ Event.stop(event);
+ },
+
+ finishDrag: function(event, success) {
+ this.dragging = false;
+
+ if(this.options.quiet){
+ Position.prepare();
+ var pointer = [Event.pointerX(event), Event.pointerY(event)];
+ Droppables.show(pointer, this.element);
+ }
+
+ if(this.options.ghosting) {
+ if (!this._originallyAbsolute)
+ Position.relativize(this.element);
+ delete this._originallyAbsolute;
+ Element.remove(this._clone);
+ this._clone = null;
+ }
+
+ var dropped = false;
+ if(success) {
+ dropped = Droppables.fire(event, this.element);
+ if (!dropped) dropped = false;
+ }
+ if(dropped && this.options.onDropped) this.options.onDropped(this.element);
+ Draggables.notify('onEnd', this, event);
+
+ var revert = this.options.revert;
+ if(revert && Object.isFunction(revert)) revert = revert(this.element);
+
+ var d = this.currentDelta();
+ if(revert && this.options.reverteffect) {
+ if (dropped == 0 || revert != 'failure')
+ this.options.reverteffect(this.element,
+ d[1]-this.delta[1], d[0]-this.delta[0]);
+ } else {
+ this.delta = d;
+ }
+
+ if(this.options.zindex)
+ this.element.style.zIndex = this.originalZ;
+
+ if(this.options.endeffect)
+ this.options.endeffect(this.element);
+
+ Draggables.deactivate(this);
+ Droppables.reset();
+ },
+
+ keyPress: function(event) {
+ if(event.keyCode!=Event.KEY_ESC) return;
+ this.finishDrag(event, false);
+ Event.stop(event);
+ },
+
+ endDrag: function(event) {
+ if(!this.dragging) return;
+ this.stopScrolling();
+ this.finishDrag(event, true);
+ Event.stop(event);
+ },
+
+ draw: function(point) {
+ var pos = this.element.cumulativeOffset();
+ if(this.options.ghosting) {
+ var r = Position.realOffset(this.element);
+ pos[0] += r[0] - Position.deltaX; pos[1] += r[1] - Position.deltaY;
+ }
+
+ var d = this.currentDelta();
+ pos[0] -= d[0]; pos[1] -= d[1];
+
+ if(this.options.scroll && (this.options.scroll != window && this._isScrollChild)) {
+ pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft;
+ pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop;
+ }
+
+ var p = [0,1].map(function(i){
+ return (point[i]-pos[i]-this.offset[i])
+ }.bind(this));
+
+ if(this.options.snap) {
+ if(Object.isFunction(this.options.snap)) {
+ p = this.options.snap(p[0],p[1],this);
+ } else {
+ if(Object.isArray(this.options.snap)) {
+ p = p.map( function(v, i) {
+ return (v/this.options.snap[i]).round()*this.options.snap[i] }.bind(this));
+ } else {
+ p = p.map( function(v) {
+ return (v/this.options.snap).round()*this.options.snap }.bind(this));
+ }
+ }}
+
+ var style = this.element.style;
+ if((!this.options.constraint) || (this.options.constraint=='horizontal'))
+ style.left = p[0] + "px";
+ if((!this.options.constraint) || (this.options.constraint=='vertical'))
+ style.top = p[1] + "px";
+
+ if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering
+ },
+
+ stopScrolling: function() {
+ if(this.scrollInterval) {
+ clearInterval(this.scrollInterval);
+ this.scrollInterval = null;
+ Draggables._lastScrollPointer = null;
+ }
+ },
+
+ startScrolling: function(speed) {
+ if(!(speed[0] || speed[1])) return;
+ this.scrollSpeed = [speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed];
+ this.lastScrolled = new Date();
+ this.scrollInterval = setInterval(this.scroll.bind(this), 10);
+ },
+
+ scroll: function() {
+ var current = new Date();
+ var delta = current - this.lastScrolled;
+ this.lastScrolled = current;
+ if(this.options.scroll == window) {
+ with (this._getWindowScroll(this.options.scroll)) {
+ if (this.scrollSpeed[0] || this.scrollSpeed[1]) {
+ var d = delta / 1000;
+ this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], top + d*this.scrollSpeed[1] );
+ }
+ }
+ } else {
+ this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000;
+ this.options.scroll.scrollTop += this.scrollSpeed[1] * delta / 1000;
+ }
+
+ Position.prepare();
+ Droppables.show(Draggables._lastPointer, this.element);
+ Draggables.notify('onDrag', this);
+ if (this._isScrollChild) {
+ Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer);
+ Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000;
+ Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000;
+ if (Draggables._lastScrollPointer[0] < 0)
+ Draggables._lastScrollPointer[0] = 0;
+ if (Draggables._lastScrollPointer[1] < 0)
+ Draggables._lastScrollPointer[1] = 0;
+ this.draw(Draggables._lastScrollPointer);
+ }
+
+ if(this.options.change) this.options.change(this);
+ },
+
+ _getWindowScroll: function(w) {
+ var T, L, W, H;
+ with (w.document) {
+ if (w.document.documentElement && documentElement.scrollTop) {
+ T = documentElement.scrollTop;
+ L = documentElement.scrollLeft;
+ } else if (w.document.body) {
+ T = body.scrollTop;
+ L = body.scrollLeft;
+ }
+ if (w.innerWidth) {
+ W = w.innerWidth;
+ H = w.innerHeight;
+ } else if (w.document.documentElement && documentElement.clientWidth) {
+ W = documentElement.clientWidth;
+ H = documentElement.clientHeight;
+ } else {
+ W = body.offsetWidth;
+ H = body.offsetHeight;
+ }
+ }
+ return { top: T, left: L, width: W, height: H };
+ }
+});
+
+Draggable._dragging = { };
+
+/*--------------------------------------------------------------------------*/
+
+var SortableObserver = Class.create({
+ initialize: function(element, observer) {
+ this.element = DOKUid(element);
+ this.observer = observer;
+ this.lastValue = Sortable.serialize(this.element);
+ },
+
+ onStart: function() {
+ this.lastValue = Sortable.serialize(this.element);
+ },
+
+ onEnd: function() {
+ Sortable.unmark();
+ if(this.lastValue != Sortable.serialize(this.element))
+ this.observer(this.element)
+ }
+});
+
+var Sortable = {
+ SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,
+
+ sortables: { },
+
+ _findRootElement: function(element) {
+ while (element.tagName.toUpperCase() != "BODY") {
+ if(element.id && Sortable.sortables[element.id]) return element;
+ element = element.parentNode;
+ }
+ },
+
+ options: function(element) {
+ element = Sortable._findRootElement(DOKUid(element));
+ if(!element) return;
+ return Sortable.sortables[element.id];
+ },
+
+ destroy: function(element){
+ element = DOKUid(element);
+ var s = Sortable.sortables[element.id];
+
+ if(s) {
+ Draggables.removeObserver(s.element);
+ s.droppables.each(function(d){ Droppables.remove(d) });
+ s.draggables.invoke('destroy');
+
+ delete Sortable.sortables[s.element.id];
+ }
+ },
+
+ create: function(element) {
+ element = DOKUid(element);
+ var options = Object.extend({
+ element: element,
+ tag: 'li', // assumes li children, override with tag: 'tagname'
+ dropOnEmpty: false,
+ tree: false,
+ treeTag: 'ul',
+ overlap: 'vertical', // one of 'vertical', 'horizontal'
+ constraint: 'vertical', // one of 'vertical', 'horizontal', false
+ containment: element, // also takes array of elements (or id's); or false
+ handle: false, // or a CSS class
+ only: false,
+ delay: 0,
+ hoverclass: null,
+ ghosting: false,
+ quiet: false,
+ scroll: false,
+ scrollSensitivity: 20,
+ scrollSpeed: 15,
+ format: this.SERIALIZE_RULE,
+
+ // these take arrays of elements or ids and can be
+ // used for better initialization performance
+ elements: false,
+ handles: false,
+
+ onChange: Prototype.emptyFunction,
+ onUpdate: Prototype.emptyFunction
+ }, arguments[1] || { });
+
+ // clear any old sortable with same element
+ this.destroy(element);
+
+ // build options for the draggables
+ var options_for_draggable = {
+ revert: true,
+ quiet: options.quiet,
+ scroll: options.scroll,
+ scrollSpeed: options.scrollSpeed,
+ scrollSensitivity: options.scrollSensitivity,
+ delay: options.delay,
+ ghosting: options.ghosting,
+ constraint: options.constraint,
+ handle: options.handle };
+
+ if(options.starteffect)
+ options_for_draggable.starteffect = options.starteffect;
+
+ if(options.reverteffect)
+ options_for_draggable.reverteffect = options.reverteffect;
+ else
+ if(options.ghosting) options_for_draggable.reverteffect = function(element) {
+ element.style.top = 0;
+ element.style.left = 0;
+ };
+
+ if(options.endeffect)
+ options_for_draggable.endeffect = options.endeffect;
+
+ if(options.zindex)
+ options_for_draggable.zindex = options.zindex;
+
+ // build options for the droppables
+ var options_for_droppable = {
+ overlap: options.overlap,
+ containment: options.containment,
+ tree: options.tree,
+ hoverclass: options.hoverclass,
+ onHover: Sortable.onHover
+ };
+
+ var options_for_tree = {
+ onHover: Sortable.onEmptyHover,
+ overlap: options.overlap,
+ containment: options.containment,
+ hoverclass: options.hoverclass
+ };
+
+ // fix for gecko engine
+ Element.cleanWhitespace(element);
+
+ options.draggables = [];
+ options.droppables = [];
+
+ // drop on empty handling
+ if(options.dropOnEmpty || options.tree) {
+ Droppables.add(element, options_for_tree);
+ options.droppables.push(element);
+ }
+
+ (options.elements || this.findElements(element, options) || []).each( function(e,i) {
+ var handle = options.handles ? DOKUid(options.handles[i]) :
+ (options.handle ? DOKUid(e).select('.' + options.handle)[0] : e);
+ options.draggables.push(
+ new Draggable(e, Object.extend(options_for_draggable, { handle: handle })));
+ Droppables.add(e, options_for_droppable);
+ if(options.tree) e.treeNode = element;
+ options.droppables.push(e);
+ });
+
+ if(options.tree) {
+ (Sortable.findTreeElements(element, options) || []).each( function(e) {
+ Droppables.add(e, options_for_tree);
+ e.treeNode = element;
+ options.droppables.push(e);
+ });
+ }
+
+ // keep reference
+ this.sortables[element.identify()] = options;
+
+ // for onupdate
+ Draggables.addObserver(new SortableObserver(element, options.onUpdate));
+
+ },
+
+ // return all suitable-for-sortable elements in a guaranteed order
+ findElements: function(element, options) {
+ return Element.findChildren(
+ element, options.only, options.tree ? true : false, options.tag);
+ },
+
+ findTreeElements: function(element, options) {
+ return Element.findChildren(
+ element, options.only, options.tree ? true : false, options.treeTag);
+ },
+
+ onHover: function(element, dropon, overlap) {
+ if(Element.isParent(dropon, element)) return;
+
+ if(overlap > .33 && overlap < .66 && Sortable.options(dropon).tree) {
+ return;
+ } else if(overlap>0.5) {
+ Sortable.mark(dropon, 'before');
+ if(dropon.previousSibling != element) {
+ var oldParentNode = element.parentNode;
+ element.style.visibility = "hidden"; // fix gecko rendering
+ dropon.parentNode.insertBefore(element, dropon);
+ if(dropon.parentNode!=oldParentNode)
+ Sortable.options(oldParentNode).onChange(element);
+ Sortable.options(dropon.parentNode).onChange(element);
+ }
+ } else {
+ Sortable.mark(dropon, 'after');
+ var nextElement = dropon.nextSibling || null;
+ if(nextElement != element) {
+ var oldParentNode = element.parentNode;
+ element.style.visibility = "hidden"; // fix gecko rendering
+ dropon.parentNode.insertBefore(element, nextElement);
+ if(dropon.parentNode!=oldParentNode)
+ Sortable.options(oldParentNode).onChange(element);
+ Sortable.options(dropon.parentNode).onChange(element);
+ }
+ }
+ },
+
+ onEmptyHover: function(element, dropon, overlap) {
+ var oldParentNode = element.parentNode;
+ var droponOptions = Sortable.options(dropon);
+
+ if(!Element.isParent(dropon, element)) {
+ var index;
+
+ var children = Sortable.findElements(dropon, {tag: droponOptions.tag, only: droponOptions.only});
+ var child = null;
+
+ if(children) {
+ var offset = Element.offsetSize(dropon, droponOptions.overlap) * (1.0 - overlap);
+
+ for (index = 0; index < children.length; index += 1) {
+ if (offset - Element.offsetSize (children[index], droponOptions.overlap) >= 0) {
+ offset -= Element.offsetSize (children[index], droponOptions.overlap);
+ } else if (offset - (Element.offsetSize (children[index], droponOptions.overlap) / 2) >= 0) {
+ child = index + 1 < children.length ? children[index + 1] : null;
+ break;
+ } else {
+ child = children[index];
+ break;
+ }
+ }
+ }
+
+ dropon.insertBefore(element, child);
+
+ Sortable.options(oldParentNode).onChange(element);
+ droponOptions.onChange(element);
+ }
+ },
+
+ unmark: function() {
+ if(Sortable._marker) Sortable._marker.hide();
+ },
+
+ mark: function(dropon, position) {
+ // mark on ghosting only
+ var sortable = Sortable.options(dropon.parentNode);
+ if(sortable && !sortable.ghosting) return;
+
+ if(!Sortable._marker) {
+ Sortable._marker =
+ (DOKUid('dropmarker') || Element.extend(document.createElement('DIV'))).
+ hide().addClassName('dropmarker').setStyle({position:'absolute'});
+ document.getElementsByTagName("body").item(0).appendChild(Sortable._marker);
+ }
+ var offsets = dropon.cumulativeOffset();
+ Sortable._marker.setStyle({left: offsets[0]+'px', top: offsets[1] + 'px'});
+
+ if(position=='after')
+ if(sortable.overlap == 'horizontal')
+ Sortable._marker.setStyle({left: (offsets[0]+dropon.clientWidth) + 'px'});
+ else
+ Sortable._marker.setStyle({top: (offsets[1]+dropon.clientHeight) + 'px'});
+
+ Sortable._marker.show();
+ },
+
+ _tree: function(element, options, parent) {
+ var children = Sortable.findElements(element, options) || [];
+
+ for (var i = 0; i < children.length; ++i) {
+ var match = children[i].id.match(options.format);
+
+ if (!match) continue;
+
+ var child = {
+ id: encodeURIComponent(match ? match[1] : null),
+ element: element,
+ parent: parent,
+ children: [],
+ position: parent.children.length,
+ container: DOKUid(children[i]).down(options.treeTag)
+ };
+
+ /* Get the element containing the children and recurse over it */
+ if (child.container)
+ this._tree(child.container, options, child);
+
+ parent.children.push (child);
+ }
+
+ return parent;
+ },
+
+ tree: function(element) {
+ element = DOKUid(element);
+ var sortableOptions = this.options(element);
+ var options = Object.extend({
+ tag: sortableOptions.tag,
+ treeTag: sortableOptions.treeTag,
+ only: sortableOptions.only,
+ name: element.id,
+ format: sortableOptions.format
+ }, arguments[1] || { });
+
+ var root = {
+ id: null,
+ parent: null,
+ children: [],
+ container: element,
+ position: 0
+ };
+
+ return Sortable._tree(element, options, root);
+ },
+
+ /* Construct a [i] index for a particular node */
+ _constructIndex: function(node) {
+ var index = '';
+ do {
+ if (node.id) index = '[' + node.position + ']' + index;
+ } while ((node = node.parent) != null);
+ return index;
+ },
+
+ sequence: function(element) {
+ element = DOKUid(element);
+ var options = Object.extend(this.options(element), arguments[1] || { });
+
+ return DOKUid(this.findElements(element, options) || []).map( function(item) {
+ return item.id.match(options.format) ? item.id.match(options.format)[1] : '';
+ });
+ },
+
+ setSequence: function(element, new_sequence) {
+ element = DOKUid(element);
+ var options = Object.extend(this.options(element), arguments[2] || { });
+
+ var nodeMap = { };
+ this.findElements(element, options).each( function(n) {
+ if (n.id.match(options.format))
+ nodeMap[n.id.match(options.format)[1]] = [n, n.parentNode];
+ n.parentNode.removeChild(n);
+ });
+
+ new_sequence.each(function(ident) {
+ var n = nodeMap[ident];
+ if (n) {
+ n[1].appendChild(n[0]);
+ delete nodeMap[ident];
+ }
+ });
+ },
+
+ serialize: function(element) {
+ element = DOKUid(element);
+ var options = Object.extend(Sortable.options(element), arguments[1] || { });
+ var name = encodeURIComponent(
+ (arguments[1] && arguments[1].name) ? arguments[1].name : element.id);
+
+ if (options.tree) {
+ return Sortable.tree(element, arguments[1]).children.map( function (item) {
+ return [name + Sortable._constructIndex(item) + "[id]=" +
+ encodeURIComponent(item.id)].concat(item.children.map(arguments.callee));
+ }).flatten().join('&');
+ } else {
+ return Sortable.sequence(element, arguments[1]).map( function(item) {
+ return name + "[]=" + encodeURIComponent(item);
+ }).join('&');
+ }
+ }
+};
+
+// Returns true if child is contained within element
+Element.isParent = function(child, element) {
+ if (!child.parentNode || child == element) return false;
+ if (child.parentNode == element) return true;
+ return Element.isParent(child.parentNode, element);
+};
+
+Element.findChildren = function(element, only, recursive, tagName) {
+ if(!element.hasChildNodes()) return null;
+ tagName = tagName.toUpperCase();
+ if(only) only = [only].flatten();
+ var elements = [];
+ $A(element.childNodes).each( function(e) {
+ if(e.tagName && e.tagName.toUpperCase()==tagName &&
+ (!only || (Element.classNames(e).detect(function(v) { return only.include(v) }))))
+ elements.push(e);
+ if(recursive) {
+ var grandchildren = Element.findChildren(e, only, recursive, tagName);
+ if(grandchildren) elements.push(grandchildren);
+ }
+ });
+
+ return (elements.length>0 ? elements.flatten() : []);
+};
+
+Element.offsetSize = function (element, type) {
+ return element['offset' + ((type=='vertical' || type=='height') ? 'Height' : 'Width')];
+}; \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/effects.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/effects.js
new file mode 100644
index 000000000..5ee17d3e2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/effects.js
@@ -0,0 +1,1123 @@
+// script.aculo.us effects.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
+
+// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+// Contributors:
+// Justin Palmer (http://encytemedia.com/)
+// Mark Pilgrim (http://diveintomark.org/)
+// Martin Bialasinki
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+// converts rgb() and #xxx to #xxxxxx format,
+// returns self (or first argument) if not convertable
+String.prototype.parseColor = function() {
+ var color = '#';
+ if (this.slice(0,4) == 'rgb(') {
+ var cols = this.slice(4,this.length-1).split(',');
+ var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);
+ } else {
+ if (this.slice(0,1) == '#') {
+ if (this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();
+ if (this.length==7) color = this.toLowerCase();
+ }
+ }
+ return (color.length==7 ? color : (arguments[0] || this));
+};
+
+/*--------------------------------------------------------------------------*/
+
+Element.collectTextNodes = function(element) {
+ return $A(DOKUid(element).childNodes).collect( function(node) {
+ return (node.nodeType==3 ? node.nodeValue :
+ (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));
+ }).flatten().join('');
+};
+
+Element.collectTextNodesIgnoreClass = function(element, className) {
+ return $A(DOKUid(element).childNodes).collect( function(node) {
+ return (node.nodeType==3 ? node.nodeValue :
+ ((node.hasChildNodes() && !Element.hasClassName(node,className)) ?
+ Element.collectTextNodesIgnoreClass(node, className) : ''));
+ }).flatten().join('');
+};
+
+Element.setContentZoom = function(element, percent) {
+ element = DOKUid(element);
+ element.setStyle({fontSize: (percent/100) + 'em'});
+ if (Prototype.Browser.WebKit) window.scrollBy(0,0);
+ return element;
+};
+
+Element.getInlineOpacity = function(element){
+ return DOKUid(element).style.opacity || '';
+};
+
+Element.forceRerendering = function(element) {
+ try {
+ element = DOKUid(element);
+ var n = document.createTextNode(' ');
+ element.appendChild(n);
+ element.removeChild(n);
+ } catch(e) { }
+};
+
+/*--------------------------------------------------------------------------*/
+
+var Effect = {
+ _elementDoesNotExistError: {
+ name: 'ElementDoesNotExistError',
+ message: 'The specified DOM element does not exist, but is required for this effect to operate'
+ },
+ Transitions: {
+ linear: Prototype.K,
+ sinoidal: function(pos) {
+ return (-Math.cos(pos*Math.PI)/2) + .5;
+ },
+ reverse: function(pos) {
+ return 1-pos;
+ },
+ flicker: function(pos) {
+ var pos = ((-Math.cos(pos*Math.PI)/4) + .75) + Math.random()/4;
+ return pos > 1 ? 1 : pos;
+ },
+ wobble: function(pos) {
+ return (-Math.cos(pos*Math.PI*(9*pos))/2) + .5;
+ },
+ pulse: function(pos, pulses) {
+ return (-Math.cos((pos*((pulses||5)-.5)*2)*Math.PI)/2) + .5;
+ },
+ spring: function(pos) {
+ return 1 - (Math.cos(pos * 4.5 * Math.PI) * Math.exp(-pos * 6));
+ },
+ none: function(pos) {
+ return 0;
+ },
+ full: function(pos) {
+ return 1;
+ }
+ },
+ DefaultOptions: {
+ duration: 1.0, // seconds
+ fps: 100, // 100= assume 66fps max.
+ sync: false, // true for combining
+ from: 0.0,
+ to: 1.0,
+ delay: 0.0,
+ queue: 'parallel'
+ },
+ tagifyText: function(element) {
+ var tagifyStyle = 'position:relative';
+ if (Prototype.Browser.IE) tagifyStyle += ';zoom:1';
+
+ element = DOKUid(element);
+ $A(element.childNodes).each( function(child) {
+ if (child.nodeType==3) {
+ child.nodeValue.toArray().each( function(character) {
+ element.insertBefore(
+ new Element('span', {style: tagifyStyle}).update(
+ character == ' ' ? String.fromCharCode(160) : character),
+ child);
+ });
+ Element.remove(child);
+ }
+ });
+ },
+ multiple: function(element, effect) {
+ var elements;
+ if (((typeof element == 'object') ||
+ Object.isFunction(element)) &&
+ (element.length))
+ elements = element;
+ else
+ elements = DOKUid(element).childNodes;
+
+ var options = Object.extend({
+ speed: 0.1,
+ delay: 0.0
+ }, arguments[2] || { });
+ var masterDelay = options.delay;
+
+ $A(elements).each( function(element, index) {
+ new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));
+ });
+ },
+ PAIRS: {
+ 'slide': ['SlideDown','SlideUp'],
+ 'blind': ['BlindDown','BlindUp'],
+ 'appear': ['Appear','Fade']
+ },
+ toggle: function(element, effect, options) {
+ element = DOKUid(element);
+ effect = (effect || 'appear').toLowerCase();
+
+ return Effect[ Effect.PAIRS[ effect ][ element.visible() ? 1 : 0 ] ](element, Object.extend({
+ queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
+ }, options || {}));
+ }
+};
+
+Effect.DefaultOptions.transition = Effect.Transitions.sinoidal;
+
+/* ------------- core effects ------------- */
+
+Effect.ScopedQueue = Class.create(Enumerable, {
+ initialize: function() {
+ this.effects = [];
+ this.interval = null;
+ },
+ _each: function(iterator) {
+ this.effects._each(iterator);
+ },
+ add: function(effect) {
+ var timestamp = new Date().getTime();
+
+ var position = Object.isString(effect.options.queue) ?
+ effect.options.queue : effect.options.queue.position;
+
+ switch(position) {
+ case 'front':
+ // move unstarted effects after this effect
+ this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {
+ e.startOn += effect.finishOn;
+ e.finishOn += effect.finishOn;
+ });
+ break;
+ case 'with-last':
+ timestamp = this.effects.pluck('startOn').max() || timestamp;
+ break;
+ case 'end':
+ // start effect after last queued effect has finished
+ timestamp = this.effects.pluck('finishOn').max() || timestamp;
+ break;
+ }
+
+ effect.startOn += timestamp;
+ effect.finishOn += timestamp;
+
+ if (!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit))
+ this.effects.push(effect);
+
+ if (!this.interval)
+ this.interval = setInterval(this.loop.bind(this), 15);
+ },
+ remove: function(effect) {
+ this.effects = this.effects.reject(function(e) { return e==effect });
+ if (this.effects.length == 0) {
+ clearInterval(this.interval);
+ this.interval = null;
+ }
+ },
+ loop: function() {
+ var timePos = new Date().getTime();
+ for(var i=0, len=this.effects.length;i<len;i++)
+ this.effects[i] && this.effects[i].loop(timePos);
+ }
+});
+
+Effect.Queues = {
+ instances: $H(),
+ get: function(queueName) {
+ if (!Object.isString(queueName)) return queueName;
+
+ return this.instances.get(queueName) ||
+ this.instances.set(queueName, new Effect.ScopedQueue());
+ }
+};
+Effect.Queue = Effect.Queues.get('global');
+
+Effect.Base = Class.create({
+ position: null,
+ start: function(options) {
+ if (options && options.transition === false) options.transition = Effect.Transitions.linear;
+ this.options = Object.extend(Object.extend({ },Effect.DefaultOptions), options || { });
+ this.currentFrame = 0;
+ this.state = 'idle';
+ this.startOn = this.options.delay*1000;
+ this.finishOn = this.startOn+(this.options.duration*1000);
+ this.fromToDelta = this.options.to-this.options.from;
+ this.totalTime = this.finishOn-this.startOn;
+ this.totalFrames = this.options.fps*this.options.duration;
+
+ this.render = (function() {
+ function dispatch(effect, eventName) {
+ if (effect.options[eventName + 'Internal'])
+ effect.options[eventName + 'Internal'](effect);
+ if (effect.options[eventName])
+ effect.options[eventName](effect);
+ }
+
+ return function(pos) {
+ if (this.state === "idle") {
+ this.state = "running";
+ dispatch(this, 'beforeSetup');
+ if (this.setup) this.setup();
+ dispatch(this, 'afterSetup');
+ }
+ if (this.state === "running") {
+ pos = (this.options.transition(pos) * this.fromToDelta) + this.options.from;
+ this.position = pos;
+ dispatch(this, 'beforeUpdate');
+ if (this.update) this.update(pos);
+ dispatch(this, 'afterUpdate');
+ }
+ };
+ })();
+
+ this.event('beforeStart');
+ if (!this.options.sync)
+ Effect.Queues.get(Object.isString(this.options.queue) ?
+ 'global' : this.options.queue.scope).add(this);
+ },
+ loop: function(timePos) {
+ if (timePos >= this.startOn) {
+ if (timePos >= this.finishOn) {
+ this.render(1.0);
+ this.cancel();
+ this.event('beforeFinish');
+ if (this.finish) this.finish();
+ this.event('afterFinish');
+ return;
+ }
+ var pos = (timePos - this.startOn) / this.totalTime,
+ frame = (pos * this.totalFrames).round();
+ if (frame > this.currentFrame) {
+ this.render(pos);
+ this.currentFrame = frame;
+ }
+ }
+ },
+ cancel: function() {
+ if (!this.options.sync)
+ Effect.Queues.get(Object.isString(this.options.queue) ?
+ 'global' : this.options.queue.scope).remove(this);
+ this.state = 'finished';
+ },
+ event: function(eventName) {
+ if (this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);
+ if (this.options[eventName]) this.options[eventName](this);
+ },
+ inspect: function() {
+ var data = $H();
+ for(property in this)
+ if (!Object.isFunction(this[property])) data.set(property, this[property]);
+ return '#<Effect:' + data.inspect() + ',options:' + $H(this.options).inspect() + '>';
+ }
+});
+
+Effect.Parallel = Class.create(Effect.Base, {
+ initialize: function(effects) {
+ this.effects = effects || [];
+ this.start(arguments[1]);
+ },
+ update: function(position) {
+ this.effects.invoke('render', position);
+ },
+ finish: function(position) {
+ this.effects.each( function(effect) {
+ effect.render(1.0);
+ effect.cancel();
+ effect.event('beforeFinish');
+ if (effect.finish) effect.finish(position);
+ effect.event('afterFinish');
+ });
+ }
+});
+
+Effect.Tween = Class.create(Effect.Base, {
+ initialize: function(object, from, to) {
+ object = Object.isString(object) ? DOKUid(object) : object;
+ var args = $A(arguments), method = args.last(),
+ options = args.length == 5 ? args[3] : null;
+ this.method = Object.isFunction(method) ? method.bind(object) :
+ Object.isFunction(object[method]) ? object[method].bind(object) :
+ function(value) { object[method] = value };
+ this.start(Object.extend({ from: from, to: to }, options || { }));
+ },
+ update: function(position) {
+ this.method(position);
+ }
+});
+
+Effect.Event = Class.create(Effect.Base, {
+ initialize: function() {
+ this.start(Object.extend({ duration: 0 }, arguments[0] || { }));
+ },
+ update: Prototype.emptyFunction
+});
+
+Effect.Opacity = Class.create(Effect.Base, {
+ initialize: function(element) {
+ this.element = DOKUid(element);
+ if (!this.element) throw(Effect._elementDoesNotExistError);
+ // make this work on IE on elements without 'layout'
+ if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
+ this.element.setStyle({zoom: 1});
+ var options = Object.extend({
+ from: this.element.getOpacity() || 0.0,
+ to: 1.0
+ }, arguments[1] || { });
+ this.start(options);
+ },
+ update: function(position) {
+ this.element.setOpacity(position);
+ }
+});
+
+Effect.Move = Class.create(Effect.Base, {
+ initialize: function(element) {
+ this.element = DOKUid(element);
+ if (!this.element) throw(Effect._elementDoesNotExistError);
+ var options = Object.extend({
+ x: 0,
+ y: 0,
+ mode: 'relative'
+ }, arguments[1] || { });
+ this.start(options);
+ },
+ setup: function() {
+ this.element.makePositioned();
+ this.originalLeft = parseFloat(this.element.getStyle('left') || '0');
+ this.originalTop = parseFloat(this.element.getStyle('top') || '0');
+ if (this.options.mode == 'absolute') {
+ this.options.x = this.options.x - this.originalLeft;
+ this.options.y = this.options.y - this.originalTop;
+ }
+ },
+ update: function(position) {
+ this.element.setStyle({
+ left: (this.options.x * position + this.originalLeft).round() + 'px',
+ top: (this.options.y * position + this.originalTop).round() + 'px'
+ });
+ }
+});
+
+// for backwards compatibility
+Effect.MoveBy = function(element, toTop, toLeft) {
+ return new Effect.Move(element,
+ Object.extend({ x: toLeft, y: toTop }, arguments[3] || { }));
+};
+
+Effect.Scale = Class.create(Effect.Base, {
+ initialize: function(element, percent) {
+ this.element = DOKUid(element);
+ if (!this.element) throw(Effect._elementDoesNotExistError);
+ var options = Object.extend({
+ scaleX: true,
+ scaleY: true,
+ scaleContent: true,
+ scaleFromCenter: false,
+ scaleMode: 'box', // 'box' or 'contents' or { } with provided values
+ scaleFrom: 100.0,
+ scaleTo: percent
+ }, arguments[2] || { });
+ this.start(options);
+ },
+ setup: function() {
+ this.restoreAfterFinish = this.options.restoreAfterFinish || false;
+ this.elementPositioning = this.element.getStyle('position');
+
+ this.originalStyle = { };
+ ['top','left','width','height','fontSize'].each( function(k) {
+ this.originalStyle[k] = this.element.style[k];
+ }.bind(this));
+
+ this.originalTop = this.element.offsetTop;
+ this.originalLeft = this.element.offsetLeft;
+
+ var fontSize = this.element.getStyle('font-size') || '100%';
+ ['em','px','%','pt'].each( function(fontSizeType) {
+ if (fontSize.indexOf(fontSizeType)>0) {
+ this.fontSize = parseFloat(fontSize);
+ this.fontSizeType = fontSizeType;
+ }
+ }.bind(this));
+
+ this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;
+
+ this.dims = null;
+ if (this.options.scaleMode=='box')
+ this.dims = [this.element.offsetHeight, this.element.offsetWidth];
+ if (/^content/.test(this.options.scaleMode))
+ this.dims = [this.element.scrollHeight, this.element.scrollWidth];
+ if (!this.dims)
+ this.dims = [this.options.scaleMode.originalHeight,
+ this.options.scaleMode.originalWidth];
+ },
+ update: function(position) {
+ var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);
+ if (this.options.scaleContent && this.fontSize)
+ this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType });
+ this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);
+ },
+ finish: function(position) {
+ if (this.restoreAfterFinish) this.element.setStyle(this.originalStyle);
+ },
+ setDimensions: function(height, width) {
+ var d = { };
+ if (this.options.scaleX) d.width = width.round() + 'px';
+ if (this.options.scaleY) d.height = height.round() + 'px';
+ if (this.options.scaleFromCenter) {
+ var topd = (height - this.dims[0])/2;
+ var leftd = (width - this.dims[1])/2;
+ if (this.elementPositioning == 'absolute') {
+ if (this.options.scaleY) d.top = this.originalTop-topd + 'px';
+ if (this.options.scaleX) d.left = this.originalLeft-leftd + 'px';
+ } else {
+ if (this.options.scaleY) d.top = -topd + 'px';
+ if (this.options.scaleX) d.left = -leftd + 'px';
+ }
+ }
+ this.element.setStyle(d);
+ }
+});
+
+Effect.Highlight = Class.create(Effect.Base, {
+ initialize: function(element) {
+ this.element = DOKUid(element);
+ if (!this.element) throw(Effect._elementDoesNotExistError);
+ var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || { });
+ this.start(options);
+ },
+ setup: function() {
+ // Prevent executing on elements not in the layout flow
+ if (this.element.getStyle('display')=='none') { this.cancel(); return; }
+ // Disable background image during the effect
+ this.oldStyle = { };
+ if (!this.options.keepBackgroundImage) {
+ this.oldStyle.backgroundImage = this.element.getStyle('background-image');
+ this.element.setStyle({backgroundImage: 'none'});
+ }
+ if (!this.options.endcolor)
+ this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff');
+ if (!this.options.restorecolor)
+ this.options.restorecolor = this.element.getStyle('background-color');
+ // init color calculations
+ this._base = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));
+ this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));
+ },
+ update: function(position) {
+ this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){
+ return m+((this._base[i]+(this._delta[i]*position)).round().toColorPart()); }.bind(this)) });
+ },
+ finish: function() {
+ this.element.setStyle(Object.extend(this.oldStyle, {
+ backgroundColor: this.options.restorecolor
+ }));
+ }
+});
+
+Effect.ScrollTo = function(element) {
+ var options = arguments[1] || { },
+ scrollOffsets = document.viewport.getScrollOffsets(),
+ elementOffsets = DOKUid(element).cumulativeOffset();
+
+ if (options.offset) elementOffsets[1] += options.offset;
+
+ return new Effect.Tween(null,
+ scrollOffsets.top,
+ elementOffsets[1],
+ options,
+ function(p){ scrollTo(scrollOffsets.left, p.round()); }
+ );
+};
+
+/* ------------- combination effects ------------- */
+
+Effect.Fade = function(element) {
+ element = DOKUid(element);
+ var oldOpacity = element.getInlineOpacity();
+ var options = Object.extend({
+ from: element.getOpacity() || 1.0,
+ to: 0.0,
+ afterFinishInternal: function(effect) {
+ if (effect.options.to!=0) return;
+ effect.element.hide().setStyle({opacity: oldOpacity});
+ }
+ }, arguments[1] || { });
+ return new Effect.Opacity(element,options);
+};
+
+Effect.Appear = function(element) {
+ element = DOKUid(element);
+ var options = Object.extend({
+ from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0),
+ to: 1.0,
+ // force Safari to render floated elements properly
+ afterFinishInternal: function(effect) {
+ effect.element.forceRerendering();
+ },
+ beforeSetup: function(effect) {
+ effect.element.setOpacity(effect.options.from).show();
+ }}, arguments[1] || { });
+ return new Effect.Opacity(element,options);
+};
+
+Effect.Puff = function(element) {
+ element = DOKUid(element);
+ var oldStyle = {
+ opacity: element.getInlineOpacity(),
+ position: element.getStyle('position'),
+ top: element.style.top,
+ left: element.style.left,
+ width: element.style.width,
+ height: element.style.height
+ };
+ return new Effect.Parallel(
+ [ new Effect.Scale(element, 200,
+ { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }),
+ new Effect.Opacity(element, { sync: true, to: 0.0 } ) ],
+ Object.extend({ duration: 1.0,
+ beforeSetupInternal: function(effect) {
+ Position.absolutize(effect.effects[0].element);
+ },
+ afterFinishInternal: function(effect) {
+ effect.effects[0].element.hide().setStyle(oldStyle); }
+ }, arguments[1] || { })
+ );
+};
+
+Effect.BlindUp = function(element) {
+ element = DOKUid(element);
+ element.makeClipping();
+ return new Effect.Scale(element, 0,
+ Object.extend({ scaleContent: false,
+ scaleX: false,
+ restoreAfterFinish: true,
+ afterFinishInternal: function(effect) {
+ effect.element.hide().undoClipping();
+ }
+ }, arguments[1] || { })
+ );
+};
+
+Effect.BlindDown = function(element) {
+ element = DOKUid(element);
+ var elementDimensions = element.getDimensions();
+ return new Effect.Scale(element, 100, Object.extend({
+ scaleContent: false,
+ scaleX: false,
+ scaleFrom: 0,
+ scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
+ restoreAfterFinish: true,
+ afterSetup: function(effect) {
+ effect.element.makeClipping().setStyle({height: '0px'}).show();
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.undoClipping();
+ }
+ }, arguments[1] || { }));
+};
+
+Effect.SwitchOff = function(element) {
+ element = DOKUid(element);
+ var oldOpacity = element.getInlineOpacity();
+ return new Effect.Appear(element, Object.extend({
+ duration: 0.4,
+ from: 0,
+ transition: Effect.Transitions.flicker,
+ afterFinishInternal: function(effect) {
+ new Effect.Scale(effect.element, 1, {
+ duration: 0.3, scaleFromCenter: true,
+ scaleX: false, scaleContent: false, restoreAfterFinish: true,
+ beforeSetup: function(effect) {
+ effect.element.makePositioned().makeClipping();
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity});
+ }
+ });
+ }
+ }, arguments[1] || { }));
+};
+
+Effect.DropOut = function(element) {
+ element = DOKUid(element);
+ var oldStyle = {
+ top: element.getStyle('top'),
+ left: element.getStyle('left'),
+ opacity: element.getInlineOpacity() };
+ return new Effect.Parallel(
+ [ new Effect.Move(element, {x: 0, y: 100, sync: true }),
+ new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
+ Object.extend(
+ { duration: 0.5,
+ beforeSetup: function(effect) {
+ effect.effects[0].element.makePositioned();
+ },
+ afterFinishInternal: function(effect) {
+ effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);
+ }
+ }, arguments[1] || { }));
+};
+
+Effect.Shake = function(element) {
+ element = DOKUid(element);
+ var options = Object.extend({
+ distance: 20,
+ duration: 0.5
+ }, arguments[1] || {});
+ var distance = parseFloat(options.distance);
+ var split = parseFloat(options.duration) / 10.0;
+ var oldStyle = {
+ top: element.getStyle('top'),
+ left: element.getStyle('left') };
+ return new Effect.Move(element,
+ { x: distance, y: 0, duration: split, afterFinishInternal: function(effect) {
+ new Effect.Move(effect.element,
+ { x: -distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
+ new Effect.Move(effect.element,
+ { x: distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
+ new Effect.Move(effect.element,
+ { x: -distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
+ new Effect.Move(effect.element,
+ { x: distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
+ new Effect.Move(effect.element,
+ { x: -distance, y: 0, duration: split, afterFinishInternal: function(effect) {
+ effect.element.undoPositioned().setStyle(oldStyle);
+ }}); }}); }}); }}); }}); }});
+};
+
+Effect.SlideDown = function(element) {
+ element = DOKUid(element).cleanWhitespace();
+ // SlideDown need to have the content of the element wrapped in a container element with fixed height!
+ var oldInnerBottom = element.down().getStyle('bottom');
+ var elementDimensions = element.getDimensions();
+ return new Effect.Scale(element, 100, Object.extend({
+ scaleContent: false,
+ scaleX: false,
+ scaleFrom: window.opera ? 0 : 1,
+ scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
+ restoreAfterFinish: true,
+ afterSetup: function(effect) {
+ effect.element.makePositioned();
+ effect.element.down().makePositioned();
+ if (window.opera) effect.element.setStyle({top: ''});
+ effect.element.makeClipping().setStyle({height: '0px'}).show();
+ },
+ afterUpdateInternal: function(effect) {
+ effect.element.down().setStyle({bottom:
+ (effect.dims[0] - effect.element.clientHeight) + 'px' });
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.undoClipping().undoPositioned();
+ effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); }
+ }, arguments[1] || { })
+ );
+};
+
+Effect.SlideUp = function(element) {
+ element = DOKUid(element).cleanWhitespace();
+ var oldInnerBottom = element.down().getStyle('bottom');
+ var elementDimensions = element.getDimensions();
+ return new Effect.Scale(element, window.opera ? 0 : 1,
+ Object.extend({ scaleContent: false,
+ scaleX: false,
+ scaleMode: 'box',
+ scaleFrom: 100,
+ scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
+ restoreAfterFinish: true,
+ afterSetup: function(effect) {
+ effect.element.makePositioned();
+ effect.element.down().makePositioned();
+ if (window.opera) effect.element.setStyle({top: ''});
+ effect.element.makeClipping().show();
+ },
+ afterUpdateInternal: function(effect) {
+ effect.element.down().setStyle({bottom:
+ (effect.dims[0] - effect.element.clientHeight) + 'px' });
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.hide().undoClipping().undoPositioned();
+ effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom});
+ }
+ }, arguments[1] || { })
+ );
+};
+
+// Bug in opera makes the TD containing this element expand for a instance after finish
+Effect.Squish = function(element) {
+ return new Effect.Scale(element, window.opera ? 1 : 0, {
+ restoreAfterFinish: true,
+ beforeSetup: function(effect) {
+ effect.element.makeClipping();
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.hide().undoClipping();
+ }
+ });
+};
+
+Effect.Grow = function(element) {
+ element = DOKUid(element);
+ var options = Object.extend({
+ direction: 'center',
+ moveTransition: Effect.Transitions.sinoidal,
+ scaleTransition: Effect.Transitions.sinoidal,
+ opacityTransition: Effect.Transitions.full
+ }, arguments[1] || { });
+ var oldStyle = {
+ top: element.style.top,
+ left: element.style.left,
+ height: element.style.height,
+ width: element.style.width,
+ opacity: element.getInlineOpacity() };
+
+ var dims = element.getDimensions();
+ var initialMoveX, initialMoveY;
+ var moveX, moveY;
+
+ switch (options.direction) {
+ case 'top-left':
+ initialMoveX = initialMoveY = moveX = moveY = 0;
+ break;
+ case 'top-right':
+ initialMoveX = dims.width;
+ initialMoveY = moveY = 0;
+ moveX = -dims.width;
+ break;
+ case 'bottom-left':
+ initialMoveX = moveX = 0;
+ initialMoveY = dims.height;
+ moveY = -dims.height;
+ break;
+ case 'bottom-right':
+ initialMoveX = dims.width;
+ initialMoveY = dims.height;
+ moveX = -dims.width;
+ moveY = -dims.height;
+ break;
+ case 'center':
+ initialMoveX = dims.width / 2;
+ initialMoveY = dims.height / 2;
+ moveX = -dims.width / 2;
+ moveY = -dims.height / 2;
+ break;
+ }
+
+ return new Effect.Move(element, {
+ x: initialMoveX,
+ y: initialMoveY,
+ duration: 0.01,
+ beforeSetup: function(effect) {
+ effect.element.hide().makeClipping().makePositioned();
+ },
+ afterFinishInternal: function(effect) {
+ new Effect.Parallel(
+ [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),
+ new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),
+ new Effect.Scale(effect.element, 100, {
+ scaleMode: { originalHeight: dims.height, originalWidth: dims.width },
+ sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})
+ ], Object.extend({
+ beforeSetup: function(effect) {
+ effect.effects[0].element.setStyle({height: '0px'}).show();
+ },
+ afterFinishInternal: function(effect) {
+ effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle);
+ }
+ }, options)
+ );
+ }
+ });
+};
+
+Effect.Shrink = function(element) {
+ element = DOKUid(element);
+ var options = Object.extend({
+ direction: 'center',
+ moveTransition: Effect.Transitions.sinoidal,
+ scaleTransition: Effect.Transitions.sinoidal,
+ opacityTransition: Effect.Transitions.none
+ }, arguments[1] || { });
+ var oldStyle = {
+ top: element.style.top,
+ left: element.style.left,
+ height: element.style.height,
+ width: element.style.width,
+ opacity: element.getInlineOpacity() };
+
+ var dims = element.getDimensions();
+ var moveX, moveY;
+
+ switch (options.direction) {
+ case 'top-left':
+ moveX = moveY = 0;
+ break;
+ case 'top-right':
+ moveX = dims.width;
+ moveY = 0;
+ break;
+ case 'bottom-left':
+ moveX = 0;
+ moveY = dims.height;
+ break;
+ case 'bottom-right':
+ moveX = dims.width;
+ moveY = dims.height;
+ break;
+ case 'center':
+ moveX = dims.width / 2;
+ moveY = dims.height / 2;
+ break;
+ }
+
+ return new Effect.Parallel(
+ [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),
+ new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),
+ new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })
+ ], Object.extend({
+ beforeStartInternal: function(effect) {
+ effect.effects[0].element.makePositioned().makeClipping();
+ },
+ afterFinishInternal: function(effect) {
+ effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); }
+ }, options)
+ );
+};
+
+Effect.Pulsate = function(element) {
+ element = DOKUid(element);
+ var options = arguments[1] || { },
+ oldOpacity = element.getInlineOpacity(),
+ transition = options.transition || Effect.Transitions.linear,
+ reverser = function(pos){
+ return 1 - transition((-Math.cos((pos*(options.pulses||5)*2)*Math.PI)/2) + .5);
+ };
+
+ return new Effect.Opacity(element,
+ Object.extend(Object.extend({ duration: 2.0, from: 0,
+ afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); }
+ }, options), {transition: reverser}));
+};
+
+Effect.Fold = function(element) {
+ element = DOKUid(element);
+ var oldStyle = {
+ top: element.style.top,
+ left: element.style.left,
+ width: element.style.width,
+ height: element.style.height };
+ element.makeClipping();
+ return new Effect.Scale(element, 5, Object.extend({
+ scaleContent: false,
+ scaleX: false,
+ afterFinishInternal: function(effect) {
+ new Effect.Scale(element, 1, {
+ scaleContent: false,
+ scaleY: false,
+ afterFinishInternal: function(effect) {
+ effect.element.hide().undoClipping().setStyle(oldStyle);
+ } });
+ }}, arguments[1] || { }));
+};
+
+Effect.Morph = Class.create(Effect.Base, {
+ initialize: function(element) {
+ this.element = DOKUid(element);
+ if (!this.element) throw(Effect._elementDoesNotExistError);
+ var options = Object.extend({
+ style: { }
+ }, arguments[1] || { });
+
+ if (!Object.isString(options.style)) this.style = $H(options.style);
+ else {
+ if (options.style.include(':'))
+ this.style = options.style.parseStyle();
+ else {
+ this.element.addClassName(options.style);
+ this.style = $H(this.element.getStyles());
+ this.element.removeClassName(options.style);
+ var css = this.element.getStyles();
+ this.style = this.style.reject(function(style) {
+ return style.value == css[style.key];
+ });
+ options.afterFinishInternal = function(effect) {
+ effect.element.addClassName(effect.options.style);
+ effect.transforms.each(function(transform) {
+ effect.element.style[transform.style] = '';
+ });
+ };
+ }
+ }
+ this.start(options);
+ },
+
+ setup: function(){
+ function parseColor(color){
+ if (!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff';
+ color = color.parseColor();
+ return $R(0,2).map(function(i){
+ return parseInt( color.slice(i*2+1,i*2+3), 16 );
+ });
+ }
+ this.transforms = this.style.map(function(pair){
+ var property = pair[0], value = pair[1], unit = null;
+
+ if (value.parseColor('#zzzzzz') != '#zzzzzz') {
+ value = value.parseColor();
+ unit = 'color';
+ } else if (property == 'opacity') {
+ value = parseFloat(value);
+ if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
+ this.element.setStyle({zoom: 1});
+ } else if (Element.CSS_LENGTH.test(value)) {
+ var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/);
+ value = parseFloat(components[1]);
+ unit = (components.length == 3) ? components[2] : null;
+ }
+
+ var originalValue = this.element.getStyle(property);
+ return {
+ style: property.camelize(),
+ originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0),
+ targetValue: unit=='color' ? parseColor(value) : value,
+ unit: unit
+ };
+ }.bind(this)).reject(function(transform){
+ return (
+ (transform.originalValue == transform.targetValue) ||
+ (
+ transform.unit != 'color' &&
+ (isNaN(transform.originalValue) || isNaN(transform.targetValue))
+ )
+ );
+ });
+ },
+ update: function(position) {
+ var style = { }, transform, i = this.transforms.length;
+ while(i--)
+ style[(transform = this.transforms[i]).style] =
+ transform.unit=='color' ? '#'+
+ (Math.round(transform.originalValue[0]+
+ (transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart() +
+ (Math.round(transform.originalValue[1]+
+ (transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart() +
+ (Math.round(transform.originalValue[2]+
+ (transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart() :
+ (transform.originalValue +
+ (transform.targetValue - transform.originalValue) * position).toFixed(3) +
+ (transform.unit === null ? '' : transform.unit);
+ this.element.setStyle(style, true);
+ }
+});
+
+Effect.Transform = Class.create({
+ initialize: function(tracks){
+ this.tracks = [];
+ this.options = arguments[1] || { };
+ this.addTracks(tracks);
+ },
+ addTracks: function(tracks){
+ tracks.each(function(track){
+ track = $H(track);
+ var data = track.values().first();
+ this.tracks.push($H({
+ ids: track.keys().first(),
+ effect: Effect.Morph,
+ options: { style: data }
+ }));
+ }.bind(this));
+ return this;
+ },
+ play: function(){
+ return new Effect.Parallel(
+ this.tracks.map(function(track){
+ var ids = track.get('ids'), effect = track.get('effect'), options = track.get('options');
+ var elements = [DOKUid(ids) || $$(ids)].flatten();
+ return elements.map(function(e){ return new effect(e, Object.extend({ sync:true }, options)) });
+ }).flatten(),
+ this.options
+ );
+ }
+});
+
+Element.CSS_PROPERTIES = $w(
+ 'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' +
+ 'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' +
+ 'borderRightColor borderRightStyle borderRightWidth borderSpacing ' +
+ 'borderTopColor borderTopStyle borderTopWidth bottom clip color ' +
+ 'fontSize fontWeight height left letterSpacing lineHeight ' +
+ 'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+
+ 'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' +
+ 'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' +
+ 'right textIndent top width wordSpacing zIndex');
+
+Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;
+
+String.__parseStyleElement = document.createElement('div');
+String.prototype.parseStyle = function(){
+ var style, styleRules = $H();
+ if (Prototype.Browser.WebKit)
+ style = new Element('div',{style:this}).style;
+ else {
+ String.__parseStyleElement.innerHTML = '<div style="' + this + '"></div>';
+ style = String.__parseStyleElement.childNodes[0].style;
+ }
+
+ Element.CSS_PROPERTIES.each(function(property){
+ if (style[property]) styleRules.set(property, style[property]);
+ });
+
+ if (Prototype.Browser.IE && this.include('opacity'))
+ styleRules.set('opacity', this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]);
+
+ return styleRules;
+};
+
+if (document.defaultView && document.defaultView.getComputedStyle) {
+ Element.getStyles = function(element) {
+ var css = document.defaultView.getComputedStyle(DOKUid(element), null);
+ return Element.CSS_PROPERTIES.inject({ }, function(styles, property) {
+ styles[property] = css[property];
+ return styles;
+ });
+ };
+} else {
+ Element.getStyles = function(element) {
+ element = DOKUid(element);
+ var css = element.currentStyle, styles;
+ styles = Element.CSS_PROPERTIES.inject({ }, function(results, property) {
+ results[property] = css[property];
+ return results;
+ });
+ if (!styles.opacity) styles.opacity = element.getOpacity();
+ return styles;
+ };
+}
+
+Effect.Methods = {
+ morph: function(element, style) {
+ element = DOKUid(element);
+ new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || { }));
+ return element;
+ },
+ visualEffect: function(element, effect, options) {
+ element = DOKUid(element);
+ var s = effect.dasherize().camelize(), klass = s.charAt(0).toUpperCase() + s.substring(1);
+ new Effect[klass](element, options);
+ return element;
+ },
+ highlight: function(element, options) {
+ element = DOKUid(element);
+ new Effect.Highlight(element, options);
+ return element;
+ }
+};
+
+$w('fade appear grow shrink fold blindUp blindDown slideUp slideDown '+
+ 'pulsate shake puff squish switchOff dropOut').each(
+ function(effect) {
+ Effect.Methods[effect] = function(element, options){
+ element = DOKUid(element);
+ Effect[effect.charAt(0).toUpperCase() + effect.substring(1)](element, options);
+ return element;
+ };
+ }
+);
+
+$w('getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles').each(
+ function(f) { Effect.Methods[f] = Element[f]; }
+);
+
+Element.addMethods(Effect.Methods);
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/presentacular.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/presentacular.js
new file mode 100755
index 000000000..d6ec5cd63
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/presentacular.js
@@ -0,0 +1,153 @@
+/*
+Presentacular. v 0.1
+http://labs.cavorite.com/presentacular/
+(c) 2005, Juan Manuel Caicedo
+
+This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
+
+See http://www.gnu.org/copyleft/gpl.html for more information
+
+*/
+
+/*
+Creates a chain function.
+
+Todo:
+ Handle return values
+ Add a chained property with a reference to the original function
+
+Static method
+*/
+Function.chain = function(from,ext){
+ return function() {
+ from.apply(this,arguments)
+ ext.apply(this,arguments)
+ }
+}
+
+/*
+Creates a chained function
+Instance method
+*/
+Function.prototype.chain = function(){
+ var __source = this
+ var exts = arguments
+ return function(){
+ __source.apply(this,arguments)
+ for (e = 0; e < exts.length; e++){
+ exts[e].apply(this,arguments)
+ }
+ }
+}
+
+/*
+Applies function f to each element of the list
+*/
+function Map(list,f){
+ var r = []
+ for (var i=0; i < list.length; i++){
+ r.push(f.call(this,list[i]))
+ }
+ return r
+}
+
+
+
+var Presentacular = {}
+
+/*
+Available effects
+TODO: Provide a function to add effects
+*/
+Presentacular.effects = {
+ blinddown: Effect.BlindDown,
+ blindup: Effect.BlindUp,
+ appear: Effect.Appear,
+ puff: Effect.Puff,
+ shake: Effect.Shake,
+ pulsate: Effect.Pulsate,
+ slidedown: Effect.SlideDown,
+ slideup: Effect.SlideUp,
+ highlight: Effect.Highlight,
+ grow: Effect.Grow,
+ fade: Effect.Fade,
+ fold: Effect.Fold,
+ shrink: Effect.Shrink,
+ dropout: Effect.DropOut,
+ switchoff: Effect.SwitchOff,
+ squish: Effect.Squish
+}
+
+/*
+Apply effects to element elm.
+
+parentClasses: If true, include effects defined in the parent element. Used for lists (ul, ol)
+
+*/
+Presentacular.applyEffects = function(elm,parentClasses){
+
+ var c = []
+ if (parentClasses && elm.className)
+ try {
+ c = c.concat(elm.parentNode.className.split(' '))
+ c = c.concat(elm.className.split(' '))
+ } catch (exc) {
+ return;
+ }
+ Map(c, function(cl){
+ if (!cl) return
+
+
+ //Proof of concept. this code could (and should) be more elegant
+ cl = cl.toLowerCase().split('_')
+
+ var opts = {duration: 1}
+ if (cl.length > 1){
+ opts.duration = cl[1]
+ }
+
+ if (Presentacular.effects[cl[0]]){
+ Presentacular.effects[cl[0]].call(this,elm,opts)
+ }
+ return
+ })
+}
+
+
+/*
+Chained function
+*/
+function ChangeSlide(step){
+
+ var ce = DOKUid('slide' + snum)
+
+ //Apply slide effects
+ Presentacular.applyEffects(ce)
+
+ //Apply effects to all elements but the incrementals
+ Map(ce.getElementsByTagName('*'), function(elm){
+ if (!hasClass(elm,"incremental")){
+ Presentacular.applyEffects(elm)
+ }
+ })
+}
+
+
+/*
+Chained function
+*/
+function ApplyCurrentElement(elm,className){
+ if (className == "current"){
+ Presentacular.applyEffects(elm,true)
+ }
+}
+
+/*
+Function chaining: execute the second function after the first one has finished
+
+This was necesary in order to keep the same function names and because I want
+to *extend* S5 instead of *edit* it.
+
+*/
+window.addClass = addClass.chain(ApplyCurrentElement)
+window.go = go.chain(ChangeSlide)
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/prototype.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/prototype.js
new file mode 100644
index 000000000..f100f84a7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/prototype.js
@@ -0,0 +1,4874 @@
+/* Prototype JavaScript framework, version 1.6.1
+ * (c) 2005-2009 Sam Stephenson
+ *
+ * Prototype is freely distributable under the terms of an MIT-style license.
+ * For details, see the Prototype web site: http://www.prototypejs.org/
+ *
+ *--------------------------------------------------------------------------*/
+
+var Prototype = {
+ Version: '1.6.1',
+
+ Browser: (function(){
+ var ua = navigator.userAgent;
+ var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]';
+ return {
+ IE: !!window.attachEvent && !isOpera,
+ Opera: isOpera,
+ WebKit: ua.indexOf('AppleWebKit/') > -1,
+ Gecko: ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1,
+ MobileSafari: /Apple.*Mobile.*Safari/.test(ua)
+ }
+ })(),
+
+ BrowserFeatures: {
+ XPath: !!document.evaluate,
+ SelectorsAPI: !!document.querySelector,
+ ElementExtensions: (function() {
+ var constructor = window.Element || window.HTMLElement;
+ return !!(constructor && constructor.prototype);
+ })(),
+ SpecificElementExtensions: (function() {
+ if (typeof window.HTMLDivElement !== 'undefined')
+ return true;
+
+ var div = document.createElement('div');
+ var form = document.createElement('form');
+ var isSupported = false;
+
+ if (div['__proto__'] && (div['__proto__'] !== form['__proto__'])) {
+ isSupported = true;
+ }
+
+ div = form = null;
+
+ return isSupported;
+ })()
+ },
+
+ ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',
+ JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,
+
+ emptyFunction: function() { },
+ K: function(x) { return x }
+};
+
+if (Prototype.Browser.MobileSafari)
+ Prototype.BrowserFeatures.SpecificElementExtensions = false;
+
+
+var Abstract = { };
+
+
+var Try = {
+ these: function() {
+ var returnValue;
+
+ for (var i = 0, length = arguments.length; i < length; i++) {
+ var lambda = arguments[i];
+ try {
+ returnValue = lambda();
+ break;
+ } catch (e) { }
+ }
+
+ return returnValue;
+ }
+};
+
+/* Based on Alex Arnell's inheritance implementation. */
+
+var Class = (function() {
+ function subclass() {};
+ function create() {
+ var parent = null, properties = $A(arguments);
+ if (Object.isFunction(properties[0]))
+ parent = properties.shift();
+
+ function klass() {
+ this.initialize.apply(this, arguments);
+ }
+
+ Object.extend(klass, Class.Methods);
+ klass.superclass = parent;
+ klass.subclasses = [];
+
+ if (parent) {
+ subclass.prototype = parent.prototype;
+ klass.prototype = new subclass;
+ parent.subclasses.push(klass);
+ }
+
+ for (var i = 0; i < properties.length; i++)
+ klass.addMethods(properties[i]);
+
+ if (!klass.prototype.initialize)
+ klass.prototype.initialize = Prototype.emptyFunction;
+
+ klass.prototype.constructor = klass;
+ return klass;
+ }
+
+ function addMethods(source) {
+ var ancestor = this.superclass && this.superclass.prototype;
+ var properties = Object.keys(source);
+
+ if (!Object.keys({ toString: true }).length) {
+ if (source.toString != Object.prototype.toString)
+ properties.push("toString");
+ if (source.valueOf != Object.prototype.valueOf)
+ properties.push("valueOf");
+ }
+
+ for (var i = 0, length = properties.length; i < length; i++) {
+ var property = properties[i], value = source[property];
+ if (ancestor && Object.isFunction(value) &&
+ value.argumentNames().first() == "$super") {
+ var method = value;
+ value = (function(m) {
+ return function() { return ancestor[m].apply(this, arguments); };
+ })(property).wrap(method);
+
+ value.valueOf = method.valueOf.bind(method);
+ value.toString = method.toString.bind(method);
+ }
+ this.prototype[property] = value;
+ }
+
+ return this;
+ }
+
+ return {
+ create: create,
+ Methods: {
+ addMethods: addMethods
+ }
+ };
+})();
+(function() {
+
+ var _toString = Object.prototype.toString;
+
+ function extend(destination, source) {
+ for (var property in source)
+ destination[property] = source[property];
+ return destination;
+ }
+
+ function inspect(object) {
+ try {
+ if (isUndefined(object)) return 'undefined';
+ if (object === null) return 'null';
+ return object.inspect ? object.inspect() : String(object);
+ } catch (e) {
+ if (e instanceof RangeError) return '...';
+ throw e;
+ }
+ }
+
+ function toJSON(object) {
+ var type = typeof object;
+ switch (type) {
+ case 'undefined':
+ case 'function':
+ case 'unknown': return;
+ case 'boolean': return object.toString();
+ }
+
+ if (object === null) return 'null';
+ if (object.toJSON) return object.toJSON();
+ if (isElement(object)) return;
+
+ var results = [];
+ for (var property in object) {
+ var value = toJSON(object[property]);
+ if (!isUndefined(value))
+ results.push(property.toJSON() + ': ' + value);
+ }
+
+ return '{' + results.join(', ') + '}';
+ }
+
+ function toQueryString(object) {
+ return $H(object).toQueryString();
+ }
+
+ function toHTML(object) {
+ return object && object.toHTML ? object.toHTML() : String.interpret(object);
+ }
+
+ function keys(object) {
+ var results = [];
+ for (var property in object)
+ results.push(property);
+ return results;
+ }
+
+ function values(object) {
+ var results = [];
+ for (var property in object)
+ results.push(object[property]);
+ return results;
+ }
+
+ function clone(object) {
+ return extend({ }, object);
+ }
+
+ function isElement(object) {
+ return !!(object && object.nodeType == 1);
+ }
+
+ function isArray(object) {
+ return _toString.call(object) == "[object Array]";
+ }
+
+
+ function isHash(object) {
+ return object instanceof Hash;
+ }
+
+ function isFunction(object) {
+ return typeof object === "function";
+ }
+
+ function isString(object) {
+ return _toString.call(object) == "[object String]";
+ }
+
+ function isNumber(object) {
+ return _toString.call(object) == "[object Number]";
+ }
+
+ function isUndefined(object) {
+ return typeof object === "undefined";
+ }
+
+ extend(Object, {
+ extend: extend,
+ inspect: inspect,
+ toJSON: toJSON,
+ toQueryString: toQueryString,
+ toHTML: toHTML,
+ keys: keys,
+ values: values,
+ clone: clone,
+ isElement: isElement,
+ isArray: isArray,
+ isHash: isHash,
+ isFunction: isFunction,
+ isString: isString,
+ isNumber: isNumber,
+ isUndefined: isUndefined
+ });
+})();
+Object.extend(Function.prototype, (function() {
+ var slice = Array.prototype.slice;
+
+ function update(array, args) {
+ var arrayLength = array.length, length = args.length;
+ while (length--) array[arrayLength + length] = args[length];
+ return array;
+ }
+
+ function merge(array, args) {
+ array = slice.call(array, 0);
+ return update(array, args);
+ }
+
+ function argumentNames() {
+ var names = this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1]
+ .replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g, '')
+ .replace(/\s+/g, '').split(',');
+ return names.length == 1 && !names[0] ? [] : names;
+ }
+
+ function bind(context) {
+ if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this;
+ var __method = this, args = slice.call(arguments, 1);
+ return function() {
+ var a = merge(args, arguments);
+ return __method.apply(context, a);
+ }
+ }
+
+ function bindAsEventListener(context) {
+ var __method = this, args = slice.call(arguments, 1);
+ return function(event) {
+ var a = update([event || window.event], args);
+ return __method.apply(context, a);
+ }
+ }
+
+ function curry() {
+ if (!arguments.length) return this;
+ var __method = this, args = slice.call(arguments, 0);
+ return function() {
+ var a = merge(args, arguments);
+ return __method.apply(this, a);
+ }
+ }
+
+ function delay(timeout) {
+ var __method = this, args = slice.call(arguments, 1);
+ timeout = timeout * 1000
+ return window.setTimeout(function() {
+ return __method.apply(__method, args);
+ }, timeout);
+ }
+
+ function defer() {
+ var args = update([0.01], arguments);
+ return this.delay.apply(this, args);
+ }
+
+ function wrap(wrapper) {
+ var __method = this;
+ return function() {
+ var a = update([__method.bind(this)], arguments);
+ return wrapper.apply(this, a);
+ }
+ }
+
+ function methodize() {
+ if (this._methodized) return this._methodized;
+ var __method = this;
+ return this._methodized = function() {
+ var a = update([this], arguments);
+ return __method.apply(null, a);
+ };
+ }
+
+ return {
+ argumentNames: argumentNames,
+ bind: bind,
+ bindAsEventListener: bindAsEventListener,
+ curry: curry,
+ delay: delay,
+ defer: defer,
+ wrap: wrap,
+ methodize: methodize
+ }
+})());
+
+
+Date.prototype.toJSON = function() {
+ return '"' + this.getUTCFullYear() + '-' +
+ (this.getUTCMonth() + 1).toPaddedString(2) + '-' +
+ this.getUTCDate().toPaddedString(2) + 'T' +
+ this.getUTCHours().toPaddedString(2) + ':' +
+ this.getUTCMinutes().toPaddedString(2) + ':' +
+ this.getUTCSeconds().toPaddedString(2) + 'Z"';
+};
+
+
+RegExp.prototype.match = RegExp.prototype.test;
+
+RegExp.escape = function(str) {
+ return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
+};
+var PeriodicalExecuter = Class.create({
+ initialize: function(callback, frequency) {
+ this.callback = callback;
+ this.frequency = frequency;
+ this.currentlyExecuting = false;
+
+ this.registerCallback();
+ },
+
+ registerCallback: function() {
+ this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
+ },
+
+ execute: function() {
+ this.callback(this);
+ },
+
+ stop: function() {
+ if (!this.timer) return;
+ clearInterval(this.timer);
+ this.timer = null;
+ },
+
+ onTimerEvent: function() {
+ if (!this.currentlyExecuting) {
+ try {
+ this.currentlyExecuting = true;
+ this.execute();
+ this.currentlyExecuting = false;
+ } catch(e) {
+ this.currentlyExecuting = false;
+ throw e;
+ }
+ }
+ }
+});
+Object.extend(String, {
+ interpret: function(value) {
+ return value == null ? '' : String(value);
+ },
+ specialChar: {
+ '\b': '\\b',
+ '\t': '\\t',
+ '\n': '\\n',
+ '\f': '\\f',
+ '\r': '\\r',
+ '\\': '\\\\'
+ }
+});
+
+Object.extend(String.prototype, (function() {
+
+ function prepareReplacement(replacement) {
+ if (Object.isFunction(replacement)) return replacement;
+ var template = new Template(replacement);
+ return function(match) { return template.evaluate(match) };
+ }
+
+ function gsub(pattern, replacement) {
+ var result = '', source = this, match;
+ replacement = prepareReplacement(replacement);
+
+ if (Object.isString(pattern))
+ pattern = RegExp.escape(pattern);
+
+ if (!(pattern.length || pattern.source)) {
+ replacement = replacement('');
+ return replacement + source.split('').join(replacement) + replacement;
+ }
+
+ while (source.length > 0) {
+ if (match = source.match(pattern)) {
+ result += source.slice(0, match.index);
+ result += String.interpret(replacement(match));
+ source = source.slice(match.index + match[0].length);
+ } else {
+ result += source, source = '';
+ }
+ }
+ return result;
+ }
+
+ function sub(pattern, replacement, count) {
+ replacement = prepareReplacement(replacement);
+ count = Object.isUndefined(count) ? 1 : count;
+
+ return this.gsub(pattern, function(match) {
+ if (--count < 0) return match[0];
+ return replacement(match);
+ });
+ }
+
+ function scan(pattern, iterator) {
+ this.gsub(pattern, iterator);
+ return String(this);
+ }
+
+ function truncate(length, truncation) {
+ length = length || 30;
+ truncation = Object.isUndefined(truncation) ? '...' : truncation;
+ return this.length > length ?
+ this.slice(0, length - truncation.length) + truncation : String(this);
+ }
+
+ function strip() {
+ return this.replace(/^\s+/, '').replace(/\s+$/, '');
+ }
+
+ function stripTags() {
+ return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi, '');
+ }
+
+ function stripScripts() {
+ return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
+ }
+
+ function extractScripts() {
+ var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
+ var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
+ return (this.match(matchAll) || []).map(function(scriptTag) {
+ return (scriptTag.match(matchOne) || ['', ''])[1];
+ });
+ }
+
+ function evalScripts() {
+ return this.extractScripts().map(function(script) { return eval(script) });
+ }
+
+ function escapeHTML() {
+ return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
+ }
+
+ function unescapeHTML() {
+ return this.stripTags().replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&amp;/g,'&');
+ }
+
+
+ function toQueryParams(separator) {
+ var match = this.strip().match(/([^?#]*)(#.*)?$/);
+ if (!match) return { };
+
+ return match[1].split(separator || '&').inject({ }, function(hash, pair) {
+ if ((pair = pair.split('='))[0]) {
+ var key = decodeURIComponent(pair.shift());
+ var value = pair.length > 1 ? pair.join('=') : pair[0];
+ if (value != undefined) value = decodeURIComponent(value);
+
+ if (key in hash) {
+ if (!Object.isArray(hash[key])) hash[key] = [hash[key]];
+ hash[key].push(value);
+ }
+ else hash[key] = value;
+ }
+ return hash;
+ });
+ }
+
+ function toArray() {
+ return this.split('');
+ }
+
+ function succ() {
+ return this.slice(0, this.length - 1) +
+ String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
+ }
+
+ function times(count) {
+ return count < 1 ? '' : new Array(count + 1).join(this);
+ }
+
+ function camelize() {
+ var parts = this.split('-'), len = parts.length;
+ if (len == 1) return parts[0];
+
+ var camelized = this.charAt(0) == '-'
+ ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
+ : parts[0];
+
+ for (var i = 1; i < len; i++)
+ camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);
+
+ return camelized;
+ }
+
+ function capitalize() {
+ return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
+ }
+
+ function underscore() {
+ return this.replace(/::/g, '/')
+ .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')
+ .replace(/([a-z\d])([A-Z])/g, '$1_$2')
+ .replace(/-/g, '_')
+ .toLowerCase();
+ }
+
+ function dasherize() {
+ return this.replace(/_/g, '-');
+ }
+
+ function inspect(useDoubleQuotes) {
+ var escapedString = this.replace(/[\x00-\x1f\\]/g, function(character) {
+ if (character in String.specialChar) {
+ return String.specialChar[character];
+ }
+ return '\\u00' + character.charCodeAt().toPaddedString(2, 16);
+ });
+ if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"';
+ return "'" + escapedString.replace(/'/g, '\\\'') + "'";
+ }
+
+ function toJSON() {
+ return this.inspect(true);
+ }
+
+ function unfilterJSON(filter) {
+ return this.replace(filter || Prototype.JSONFilter, '$1');
+ }
+
+ function isJSON() {
+ var str = this;
+ if (str.blank()) return false;
+ str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
+ return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
+ }
+
+ function evalJSON(sanitize) {
+ var json = this.unfilterJSON();
+ try {
+ if (!sanitize || json.isJSON()) return eval('(' + json + ')');
+ } catch (e) { }
+ throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
+ }
+
+ function include(pattern) {
+ return this.indexOf(pattern) > -1;
+ }
+
+ function startsWith(pattern) {
+ return this.indexOf(pattern) === 0;
+ }
+
+ function endsWith(pattern) {
+ var d = this.length - pattern.length;
+ return d >= 0 && this.lastIndexOf(pattern) === d;
+ }
+
+ function empty() {
+ return this == '';
+ }
+
+ function blank() {
+ return /^\s*$/.test(this);
+ }
+
+ function interpolate(object, pattern) {
+ return new Template(this, pattern).evaluate(object);
+ }
+
+ return {
+ gsub: gsub,
+ sub: sub,
+ scan: scan,
+ truncate: truncate,
+ strip: String.prototype.trim ? String.prototype.trim : strip,
+ stripTags: stripTags,
+ stripScripts: stripScripts,
+ extractScripts: extractScripts,
+ evalScripts: evalScripts,
+ escapeHTML: escapeHTML,
+ unescapeHTML: unescapeHTML,
+ toQueryParams: toQueryParams,
+ parseQuery: toQueryParams,
+ toArray: toArray,
+ succ: succ,
+ times: times,
+ camelize: camelize,
+ capitalize: capitalize,
+ underscore: underscore,
+ dasherize: dasherize,
+ inspect: inspect,
+ toJSON: toJSON,
+ unfilterJSON: unfilterJSON,
+ isJSON: isJSON,
+ evalJSON: evalJSON,
+ include: include,
+ startsWith: startsWith,
+ endsWith: endsWith,
+ empty: empty,
+ blank: blank,
+ interpolate: interpolate
+ };
+})());
+
+var Template = Class.create({
+ initialize: function(template, pattern) {
+ this.template = template.toString();
+ this.pattern = pattern || Template.Pattern;
+ },
+
+ evaluate: function(object) {
+ if (object && Object.isFunction(object.toTemplateReplacements))
+ object = object.toTemplateReplacements();
+
+ return this.template.gsub(this.pattern, function(match) {
+ if (object == null) return (match[1] + '');
+
+ var before = match[1] || '';
+ if (before == '\\') return match[2];
+
+ var ctx = object, expr = match[3];
+ var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;
+ match = pattern.exec(expr);
+ if (match == null) return before;
+
+ while (match != null) {
+ var comp = match[1].startsWith('[') ? match[2].replace(/\\\\]/g, ']') : match[1];
+ ctx = ctx[comp];
+ if (null == ctx || '' == match[3]) break;
+ expr = expr.substring('[' == match[3] ? match[1].length : match[0].length);
+ match = pattern.exec(expr);
+ }
+
+ return before + String.interpret(ctx);
+ });
+ }
+});
+Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
+
+var $break = { };
+
+var Enumerable = (function() {
+ function each(iterator, context) {
+ var index = 0;
+ try {
+ this._each(function(value) {
+ iterator.call(context, value, index++);
+ });
+ } catch (e) {
+ if (e != $break) throw e;
+ }
+ return this;
+ }
+
+ function eachSlice(number, iterator, context) {
+ var index = -number, slices = [], array = this.toArray();
+ if (number < 1) return array;
+ while ((index += number) < array.length)
+ slices.push(array.slice(index, index+number));
+ return slices.collect(iterator, context);
+ }
+
+ function all(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var result = true;
+ this.each(function(value, index) {
+ result = result && !!iterator.call(context, value, index);
+ if (!result) throw $break;
+ });
+ return result;
+ }
+
+ function any(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var result = false;
+ this.each(function(value, index) {
+ if (result = !!iterator.call(context, value, index))
+ throw $break;
+ });
+ return result;
+ }
+
+ function collect(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var results = [];
+ this.each(function(value, index) {
+ results.push(iterator.call(context, value, index));
+ });
+ return results;
+ }
+
+ function detect(iterator, context) {
+ var result;
+ this.each(function(value, index) {
+ if (iterator.call(context, value, index)) {
+ result = value;
+ throw $break;
+ }
+ });
+ return result;
+ }
+
+ function findAll(iterator, context) {
+ var results = [];
+ this.each(function(value, index) {
+ if (iterator.call(context, value, index))
+ results.push(value);
+ });
+ return results;
+ }
+
+ function grep(filter, iterator, context) {
+ iterator = iterator || Prototype.K;
+ var results = [];
+
+ if (Object.isString(filter))
+ filter = new RegExp(RegExp.escape(filter));
+
+ this.each(function(value, index) {
+ if (filter.match(value))
+ results.push(iterator.call(context, value, index));
+ });
+ return results;
+ }
+
+ function include(object) {
+ if (Object.isFunction(this.indexOf))
+ if (this.indexOf(object) != -1) return true;
+
+ var found = false;
+ this.each(function(value) {
+ if (value == object) {
+ found = true;
+ throw $break;
+ }
+ });
+ return found;
+ }
+
+ function inGroupsOf(number, fillWith) {
+ fillWith = Object.isUndefined(fillWith) ? null : fillWith;
+ return this.eachSlice(number, function(slice) {
+ while(slice.length < number) slice.push(fillWith);
+ return slice;
+ });
+ }
+
+ function inject(memo, iterator, context) {
+ this.each(function(value, index) {
+ memo = iterator.call(context, memo, value, index);
+ });
+ return memo;
+ }
+
+ function invoke(method) {
+ var args = $A(arguments).slice(1);
+ return this.map(function(value) {
+ return value[method].apply(value, args);
+ });
+ }
+
+ function max(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var result;
+ this.each(function(value, index) {
+ value = iterator.call(context, value, index);
+ if (result == null || value >= result)
+ result = value;
+ });
+ return result;
+ }
+
+ function min(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var result;
+ this.each(function(value, index) {
+ value = iterator.call(context, value, index);
+ if (result == null || value < result)
+ result = value;
+ });
+ return result;
+ }
+
+ function partition(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var trues = [], falses = [];
+ this.each(function(value, index) {
+ (iterator.call(context, value, index) ?
+ trues : falses).push(value);
+ });
+ return [trues, falses];
+ }
+
+ function pluck(property) {
+ var results = [];
+ this.each(function(value) {
+ results.push(value[property]);
+ });
+ return results;
+ }
+
+ function reject(iterator, context) {
+ var results = [];
+ this.each(function(value, index) {
+ if (!iterator.call(context, value, index))
+ results.push(value);
+ });
+ return results;
+ }
+
+ function sortBy(iterator, context) {
+ return this.map(function(value, index) {
+ return {
+ value: value,
+ criteria: iterator.call(context, value, index)
+ };
+ }).sort(function(left, right) {
+ var a = left.criteria, b = right.criteria;
+ return a < b ? -1 : a > b ? 1 : 0;
+ }).pluck('value');
+ }
+
+ function toArray() {
+ return this.map();
+ }
+
+ function zip() {
+ var iterator = Prototype.K, args = $A(arguments);
+ if (Object.isFunction(args.last()))
+ iterator = args.pop();
+
+ var collections = [this].concat(args).map($A);
+ return this.map(function(value, index) {
+ return iterator(collections.pluck(index));
+ });
+ }
+
+ function size() {
+ return this.toArray().length;
+ }
+
+ function inspect() {
+ return '#<Enumerable:' + this.toArray().inspect() + '>';
+ }
+
+
+
+
+
+
+
+
+
+ return {
+ each: each,
+ eachSlice: eachSlice,
+ all: all,
+ every: all,
+ any: any,
+ some: any,
+ collect: collect,
+ map: collect,
+ detect: detect,
+ findAll: findAll,
+ select: findAll,
+ filter: findAll,
+ grep: grep,
+ include: include,
+ member: include,
+ inGroupsOf: inGroupsOf,
+ inject: inject,
+ invoke: invoke,
+ max: max,
+ min: min,
+ partition: partition,
+ pluck: pluck,
+ reject: reject,
+ sortBy: sortBy,
+ toArray: toArray,
+ entries: toArray,
+ zip: zip,
+ size: size,
+ inspect: inspect,
+ find: detect
+ };
+})();
+function $A(iterable) {
+ if (!iterable) return [];
+ if ('toArray' in Object(iterable)) return iterable.toArray();
+ var length = iterable.length || 0, results = new Array(length);
+ while (length--) results[length] = iterable[length];
+ return results;
+}
+
+function $w(string) {
+ if (!Object.isString(string)) return [];
+ string = string.strip();
+ return string ? string.split(/\s+/) : [];
+}
+
+Array.from = $A;
+
+
+(function() {
+ var arrayProto = Array.prototype,
+ slice = arrayProto.slice,
+ _each = arrayProto.forEach; // use native browser JS 1.6 implementation if available
+
+ function each(iterator) {
+ for (var i = 0, length = this.length; i < length; i++)
+ iterator(this[i]);
+ }
+ if (!_each) _each = each;
+
+ function clear() {
+ this.length = 0;
+ return this;
+ }
+
+ function first() {
+ return this[0];
+ }
+
+ function last() {
+ return this[this.length - 1];
+ }
+
+ function compact() {
+ return this.select(function(value) {
+ return value != null;
+ });
+ }
+
+ function flatten() {
+ return this.inject([], function(array, value) {
+ if (Object.isArray(value))
+ return array.concat(value.flatten());
+ array.push(value);
+ return array;
+ });
+ }
+
+ function without() {
+ var values = slice.call(arguments, 0);
+ return this.select(function(value) {
+ return !values.include(value);
+ });
+ }
+
+ function reverse(inline) {
+ return (inline !== false ? this : this.toArray())._reverse();
+ }
+
+ function uniq(sorted) {
+ return this.inject([], function(array, value, index) {
+ if (0 == index || (sorted ? array.last() != value : !array.include(value)))
+ array.push(value);
+ return array;
+ });
+ }
+
+ function intersect(array) {
+ return this.uniq().findAll(function(item) {
+ return array.detect(function(value) { return item === value });
+ });
+ }
+
+
+ function clone() {
+ return slice.call(this, 0);
+ }
+
+ function size() {
+ return this.length;
+ }
+
+ function inspect() {
+ return '[' + this.map(Object.inspect).join(', ') + ']';
+ }
+
+ function toJSON() {
+ var results = [];
+ this.each(function(object) {
+ var value = Object.toJSON(object);
+ if (!Object.isUndefined(value)) results.push(value);
+ });
+ return '[' + results.join(', ') + ']';
+ }
+
+ function indexOf(item, i) {
+ i || (i = 0);
+ var length = this.length;
+ if (i < 0) i = length + i;
+ for (; i < length; i++)
+ if (this[i] === item) return i;
+ return -1;
+ }
+
+ function lastIndexOf(item, i) {
+ i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;
+ var n = this.slice(0, i).reverse().indexOf(item);
+ return (n < 0) ? n : i - n - 1;
+ }
+
+ function concat() {
+ var array = slice.call(this, 0), item;
+ for (var i = 0, length = arguments.length; i < length; i++) {
+ item = arguments[i];
+ if (Object.isArray(item) && !('callee' in item)) {
+ for (var j = 0, arrayLength = item.length; j < arrayLength; j++)
+ array.push(item[j]);
+ } else {
+ array.push(item);
+ }
+ }
+ return array;
+ }
+
+ Object.extend(arrayProto, Enumerable);
+
+ if (!arrayProto._reverse)
+ arrayProto._reverse = arrayProto.reverse;
+
+ Object.extend(arrayProto, {
+ _each: _each,
+ clear: clear,
+ first: first,
+ last: last,
+ compact: compact,
+ flatten: flatten,
+ without: without,
+ reverse: reverse,
+ uniq: uniq,
+ intersect: intersect,
+ clone: clone,
+ toArray: clone,
+ size: size,
+ inspect: inspect,
+ toJSON: toJSON
+ });
+
+ var CONCAT_ARGUMENTS_BUGGY = (function() {
+ return [].concat(arguments)[0][0] !== 1;
+ })(1,2)
+
+ if (CONCAT_ARGUMENTS_BUGGY) arrayProto.concat = concat;
+
+ if (!arrayProto.indexOf) arrayProto.indexOf = indexOf;
+ if (!arrayProto.lastIndexOf) arrayProto.lastIndexOf = lastIndexOf;
+})();
+function $H(object) {
+ return new Hash(object);
+};
+
+var Hash = Class.create(Enumerable, (function() {
+ function initialize(object) {
+ this._object = Object.isHash(object) ? object.toObject() : Object.clone(object);
+ }
+
+ function _each(iterator) {
+ for (var key in this._object) {
+ var value = this._object[key], pair = [key, value];
+ pair.key = key;
+ pair.value = value;
+ iterator(pair);
+ }
+ }
+
+ function set(key, value) {
+ return this._object[key] = value;
+ }
+
+ function get(key) {
+ if (this._object[key] !== Object.prototype[key])
+ return this._object[key];
+ }
+
+ function unset(key) {
+ var value = this._object[key];
+ delete this._object[key];
+ return value;
+ }
+
+ function toObject() {
+ return Object.clone(this._object);
+ }
+
+ function keys() {
+ return this.pluck('key');
+ }
+
+ function values() {
+ return this.pluck('value');
+ }
+
+ function index(value) {
+ var match = this.detect(function(pair) {
+ return pair.value === value;
+ });
+ return match && match.key;
+ }
+
+ function merge(object) {
+ return this.clone().update(object);
+ }
+
+ function update(object) {
+ return new Hash(object).inject(this, function(result, pair) {
+ result.set(pair.key, pair.value);
+ return result;
+ });
+ }
+
+ function toQueryPair(key, value) {
+ if (Object.isUndefined(value)) return key;
+ return key + '=' + encodeURIComponent(String.interpret(value));
+ }
+
+ function toQueryString() {
+ return this.inject([], function(results, pair) {
+ var key = encodeURIComponent(pair.key), values = pair.value;
+
+ if (values && typeof values == 'object') {
+ if (Object.isArray(values))
+ return results.concat(values.map(toQueryPair.curry(key)));
+ } else results.push(toQueryPair(key, values));
+ return results;
+ }).join('&');
+ }
+
+ function inspect() {
+ return '#<Hash:{' + this.map(function(pair) {
+ return pair.map(Object.inspect).join(': ');
+ }).join(', ') + '}>';
+ }
+
+ function toJSON() {
+ return Object.toJSON(this.toObject());
+ }
+
+ function clone() {
+ return new Hash(this);
+ }
+
+ return {
+ initialize: initialize,
+ _each: _each,
+ set: set,
+ get: get,
+ unset: unset,
+ toObject: toObject,
+ toTemplateReplacements: toObject,
+ keys: keys,
+ values: values,
+ index: index,
+ merge: merge,
+ update: update,
+ toQueryString: toQueryString,
+ inspect: inspect,
+ toJSON: toJSON,
+ clone: clone
+ };
+})());
+
+Hash.from = $H;
+Object.extend(Number.prototype, (function() {
+ function toColorPart() {
+ return this.toPaddedString(2, 16);
+ }
+
+ function succ() {
+ return this + 1;
+ }
+
+ function times(iterator, context) {
+ $R(0, this, true).each(iterator, context);
+ return this;
+ }
+
+ function toPaddedString(length, radix) {
+ var string = this.toString(radix || 10);
+ return '0'.times(length - string.length) + string;
+ }
+
+ function toJSON() {
+ return isFinite(this) ? this.toString() : 'null';
+ }
+
+ function abs() {
+ return Math.abs(this);
+ }
+
+ function round() {
+ return Math.round(this);
+ }
+
+ function ceil() {
+ return Math.ceil(this);
+ }
+
+ function floor() {
+ return Math.floor(this);
+ }
+
+ return {
+ toColorPart: toColorPart,
+ succ: succ,
+ times: times,
+ toPaddedString: toPaddedString,
+ toJSON: toJSON,
+ abs: abs,
+ round: round,
+ ceil: ceil,
+ floor: floor
+ };
+})());
+
+function $R(start, end, exclusive) {
+ return new ObjectRange(start, end, exclusive);
+}
+
+var ObjectRange = Class.create(Enumerable, (function() {
+ function initialize(start, end, exclusive) {
+ this.start = start;
+ this.end = end;
+ this.exclusive = exclusive;
+ }
+
+ function _each(iterator) {
+ var value = this.start;
+ while (this.include(value)) {
+ iterator(value);
+ value = value.succ();
+ }
+ }
+
+ function include(value) {
+ if (value < this.start)
+ return false;
+ if (this.exclusive)
+ return value < this.end;
+ return value <= this.end;
+ }
+
+ return {
+ initialize: initialize,
+ _each: _each,
+ include: include
+ };
+})());
+
+
+
+var Ajax = {
+ getTransport: function() {
+ return Try.these(
+ function() {return new XMLHttpRequest()},
+ function() {return new ActiveXObject('Msxml2.XMLHTTP')},
+ function() {return new ActiveXObject('Microsoft.XMLHTTP')}
+ ) || false;
+ },
+
+ activeRequestCount: 0
+};
+
+Ajax.Responders = {
+ responders: [],
+
+ _each: function(iterator) {
+ this.responders._each(iterator);
+ },
+
+ register: function(responder) {
+ if (!this.include(responder))
+ this.responders.push(responder);
+ },
+
+ unregister: function(responder) {
+ this.responders = this.responders.without(responder);
+ },
+
+ dispatch: function(callback, request, transport, json) {
+ this.each(function(responder) {
+ if (Object.isFunction(responder[callback])) {
+ try {
+ responder[callback].apply(responder, [request, transport, json]);
+ } catch (e) { }
+ }
+ });
+ }
+};
+
+Object.extend(Ajax.Responders, Enumerable);
+
+Ajax.Responders.register({
+ onCreate: function() { Ajax.activeRequestCount++ },
+ onComplete: function() { Ajax.activeRequestCount-- }
+});
+Ajax.Base = Class.create({
+ initialize: function(options) {
+ this.options = {
+ method: 'post',
+ asynchronous: true,
+ contentType: 'application/x-www-form-urlencoded',
+ encoding: 'UTF-8',
+ parameters: '',
+ evalJSON: true,
+ evalJS: true
+ };
+ Object.extend(this.options, options || { });
+
+ this.options.method = this.options.method.toLowerCase();
+
+ if (Object.isString(this.options.parameters))
+ this.options.parameters = this.options.parameters.toQueryParams();
+ else if (Object.isHash(this.options.parameters))
+ this.options.parameters = this.options.parameters.toObject();
+ }
+});
+Ajax.Request = Class.create(Ajax.Base, {
+ _complete: false,
+
+ initialize: function($super, url, options) {
+ $super(options);
+ this.transport = Ajax.getTransport();
+ this.request(url);
+ },
+
+ request: function(url) {
+ this.url = url;
+ this.method = this.options.method;
+ var params = Object.clone(this.options.parameters);
+
+ if (!['get', 'post'].include(this.method)) {
+ params['_method'] = this.method;
+ this.method = 'post';
+ }
+
+ this.parameters = params;
+
+ if (params = Object.toQueryString(params)) {
+ if (this.method == 'get')
+ this.url += (this.url.include('?') ? '&' : '?') + params;
+ else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))
+ params += '&_=';
+ }
+
+ try {
+ var response = new Ajax.Response(this);
+ if (this.options.onCreate) this.options.onCreate(response);
+ Ajax.Responders.dispatch('onCreate', this, response);
+
+ this.transport.open(this.method.toUpperCase(), this.url,
+ this.options.asynchronous);
+
+ if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1);
+
+ this.transport.onreadystatechange = this.onStateChange.bind(this);
+ this.setRequestHeaders();
+
+ this.body = this.method == 'post' ? (this.options.postBody || params) : null;
+ this.transport.send(this.body);
+
+ /* Force Firefox to handle ready state 4 for synchronous requests */
+ if (!this.options.asynchronous && this.transport.overrideMimeType)
+ this.onStateChange();
+
+ }
+ catch (e) {
+ this.dispatchException(e);
+ }
+ },
+
+ onStateChange: function() {
+ var readyState = this.transport.readyState;
+ if (readyState > 1 && !((readyState == 4) && this._complete))
+ this.respondToReadyState(this.transport.readyState);
+ },
+
+ setRequestHeaders: function() {
+ var headers = {
+ 'X-Requested-With': 'XMLHttpRequest',
+ 'X-Prototype-Version': Prototype.Version,
+ 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
+ };
+
+ if (this.method == 'post') {
+ headers['Content-type'] = this.options.contentType +
+ (this.options.encoding ? '; charset=' + this.options.encoding : '');
+
+ /* Force "Connection: close" for older Mozilla browsers to work
+ * around a bug where XMLHttpRequest sends an incorrect
+ * Content-length header. See Mozilla Bugzilla #246651.
+ */
+ if (this.transport.overrideMimeType &&
+ (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
+ headers['Connection'] = 'close';
+ }
+
+ if (typeof this.options.requestHeaders == 'object') {
+ var extras = this.options.requestHeaders;
+
+ if (Object.isFunction(extras.push))
+ for (var i = 0, length = extras.length; i < length; i += 2)
+ headers[extras[i]] = extras[i+1];
+ else
+ $H(extras).each(function(pair) { headers[pair.key] = pair.value });
+ }
+
+ for (var name in headers)
+ this.transport.setRequestHeader(name, headers[name]);
+ },
+
+ success: function() {
+ var status = this.getStatus();
+ return !status || (status >= 200 && status < 300);
+ },
+
+ getStatus: function() {
+ try {
+ return this.transport.status || 0;
+ } catch (e) { return 0 }
+ },
+
+ respondToReadyState: function(readyState) {
+ var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this);
+
+ if (state == 'Complete') {
+ try {
+ this._complete = true;
+ (this.options['on' + response.status]
+ || this.options['on' + (this.success() ? 'Success' : 'Failure')]
+ || Prototype.emptyFunction)(response, response.headerJSON);
+ } catch (e) {
+ this.dispatchException(e);
+ }
+
+ var contentType = response.getHeader('Content-type');
+ if (this.options.evalJS == 'force'
+ || (this.options.evalJS && this.isSameOrigin() && contentType
+ && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
+ this.evalResponse();
+ }
+
+ try {
+ (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON);
+ Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON);
+ } catch (e) {
+ this.dispatchException(e);
+ }
+
+ if (state == 'Complete') {
+ this.transport.onreadystatechange = Prototype.emptyFunction;
+ }
+ },
+
+ isSameOrigin: function() {
+ var m = this.url.match(/^\s*https?:\/\/[^\/]*/);
+ return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({
+ protocol: location.protocol,
+ domain: document.domain,
+ port: location.port ? ':' + location.port : ''
+ }));
+ },
+
+ getHeader: function(name) {
+ try {
+ return this.transport.getResponseHeader(name) || null;
+ } catch (e) { return null; }
+ },
+
+ evalResponse: function() {
+ try {
+ return eval((this.transport.responseText || '').unfilterJSON());
+ } catch (e) {
+ this.dispatchException(e);
+ }
+ },
+
+ dispatchException: function(exception) {
+ (this.options.onException || Prototype.emptyFunction)(this, exception);
+ Ajax.Responders.dispatch('onException', this, exception);
+ }
+});
+
+Ajax.Request.Events =
+ ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
+
+
+
+
+
+
+
+
+Ajax.Response = Class.create({
+ initialize: function(request){
+ this.request = request;
+ var transport = this.transport = request.transport,
+ readyState = this.readyState = transport.readyState;
+
+ if((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) {
+ this.status = this.getStatus();
+ this.statusText = this.getStatusText();
+ this.responseText = String.interpret(transport.responseText);
+ this.headerJSON = this._getHeaderJSON();
+ }
+
+ if(readyState == 4) {
+ var xml = transport.responseXML;
+ this.responseXML = Object.isUndefined(xml) ? null : xml;
+ this.responseJSON = this._getResponseJSON();
+ }
+ },
+
+ status: 0,
+
+ statusText: '',
+
+ getStatus: Ajax.Request.prototype.getStatus,
+
+ getStatusText: function() {
+ try {
+ return this.transport.statusText || '';
+ } catch (e) { return '' }
+ },
+
+ getHeader: Ajax.Request.prototype.getHeader,
+
+ getAllHeaders: function() {
+ try {
+ return this.getAllResponseHeaders();
+ } catch (e) { return null }
+ },
+
+ getResponseHeader: function(name) {
+ return this.transport.getResponseHeader(name);
+ },
+
+ getAllResponseHeaders: function() {
+ return this.transport.getAllResponseHeaders();
+ },
+
+ _getHeaderJSON: function() {
+ var json = this.getHeader('X-JSON');
+ if (!json) return null;
+ json = decodeURIComponent(escape(json));
+ try {
+ return json.evalJSON(this.request.options.sanitizeJSON ||
+ !this.request.isSameOrigin());
+ } catch (e) {
+ this.request.dispatchException(e);
+ }
+ },
+
+ _getResponseJSON: function() {
+ var options = this.request.options;
+ if (!options.evalJSON || (options.evalJSON != 'force' &&
+ !(this.getHeader('Content-type') || '').include('application/json')) ||
+ this.responseText.blank())
+ return null;
+ try {
+ return this.responseText.evalJSON(options.sanitizeJSON ||
+ !this.request.isSameOrigin());
+ } catch (e) {
+ this.request.dispatchException(e);
+ }
+ }
+});
+
+Ajax.Updater = Class.create(Ajax.Request, {
+ initialize: function($super, container, url, options) {
+ this.container = {
+ success: (container.success || container),
+ failure: (container.failure || (container.success ? null : container))
+ };
+
+ options = Object.clone(options);
+ var onComplete = options.onComplete;
+ options.onComplete = (function(response, json) {
+ this.updateContent(response.responseText);
+ if (Object.isFunction(onComplete)) onComplete(response, json);
+ }).bind(this);
+
+ $super(url, options);
+ },
+
+ updateContent: function(responseText) {
+ var receiver = this.container[this.success() ? 'success' : 'failure'],
+ options = this.options;
+
+ if (!options.evalScripts) responseText = responseText.stripScripts();
+
+ if (receiver = DOKUid(receiver)) {
+ if (options.insertion) {
+ if (Object.isString(options.insertion)) {
+ var insertion = { }; insertion[options.insertion] = responseText;
+ receiver.insert(insertion);
+ }
+ else options.insertion(receiver, responseText);
+ }
+ else receiver.update(responseText);
+ }
+ }
+});
+
+Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
+ initialize: function($super, container, url, options) {
+ $super(options);
+ this.onComplete = this.options.onComplete;
+
+ this.frequency = (this.options.frequency || 2);
+ this.decay = (this.options.decay || 1);
+
+ this.updater = { };
+ this.container = container;
+ this.url = url;
+
+ this.start();
+ },
+
+ start: function() {
+ this.options.onComplete = this.updateComplete.bind(this);
+ this.onTimerEvent();
+ },
+
+ stop: function() {
+ this.updater.options.onComplete = undefined;
+ clearTimeout(this.timer);
+ (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
+ },
+
+ updateComplete: function(response) {
+ if (this.options.decay) {
+ this.decay = (response.responseText == this.lastText ?
+ this.decay * this.options.decay : 1);
+
+ this.lastText = response.responseText;
+ }
+ this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency);
+ },
+
+ onTimerEvent: function() {
+ this.updater = new Ajax.Updater(this.container, this.url, this.options);
+ }
+});
+
+
+
+function DOKUid(element) {
+ if (arguments.length > 1) {
+ for (var i = 0, elements = [], length = arguments.length; i < length; i++)
+ elements.push(DOKUid(arguments[i]));
+ return elements;
+ }
+ if (Object.isString(element))
+ element = document.getElementById(element);
+ return Element.extend(element);
+}
+
+if (Prototype.BrowserFeatures.XPath) {
+ document._getElementsByXPath = function(expression, parentElement) {
+ var results = [];
+ var query = document.evaluate(expression, DOKUid(parentElement) || document,
+ null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
+ for (var i = 0, length = query.snapshotLength; i < length; i++)
+ results.push(Element.extend(query.snapshotItem(i)));
+ return results;
+ };
+}
+
+/*--------------------------------------------------------------------------*/
+
+if (!window.Node) var Node = { };
+
+if (!Node.ELEMENT_NODE) {
+ Object.extend(Node, {
+ ELEMENT_NODE: 1,
+ ATTRIBUTE_NODE: 2,
+ TEXT_NODE: 3,
+ CDATA_SECTION_NODE: 4,
+ ENTITY_REFERENCE_NODE: 5,
+ ENTITY_NODE: 6,
+ PROCESSING_INSTRUCTION_NODE: 7,
+ COMMENT_NODE: 8,
+ DOCUMENT_NODE: 9,
+ DOCUMENT_TYPE_NODE: 10,
+ DOCUMENT_FRAGMENT_NODE: 11,
+ NOTATION_NODE: 12
+ });
+}
+
+
+(function(global) {
+
+ var SETATTRIBUTE_IGNORES_NAME = (function(){
+ var elForm = document.createElement("form");
+ var elInput = document.createElement("input");
+ var root = document.documentElement;
+ elInput.setAttribute("name", "test");
+ elForm.appendChild(elInput);
+ root.appendChild(elForm);
+ var isBuggy = elForm.elements
+ ? (typeof elForm.elements.test == "undefined")
+ : null;
+ root.removeChild(elForm);
+ elForm = elInput = null;
+ return isBuggy;
+ })();
+
+ var element = global.Element;
+ global.Element = function(tagName, attributes) {
+ attributes = attributes || { };
+ tagName = tagName.toLowerCase();
+ var cache = Element.cache;
+ if (SETATTRIBUTE_IGNORES_NAME && attributes.name) {
+ tagName = '<' + tagName + ' name="' + attributes.name + '">';
+ delete attributes.name;
+ return Element.writeAttribute(document.createElement(tagName), attributes);
+ }
+ if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName));
+ return Element.writeAttribute(cache[tagName].cloneNode(false), attributes);
+ };
+ Object.extend(global.Element, element || { });
+ if (element) global.Element.prototype = element.prototype;
+})(this);
+
+Element.cache = { };
+Element.idCounter = 1;
+
+Element.Methods = {
+ visible: function(element) {
+ return DOKUid(element).style.display != 'none';
+ },
+
+ toggle: function(element) {
+ element = DOKUid(element);
+ Element[Element.visible(element) ? 'hide' : 'show'](element);
+ return element;
+ },
+
+
+ hide: function(element) {
+ element = DOKUid(element);
+ element.style.display = 'none';
+ return element;
+ },
+
+ show: function(element) {
+ element = DOKUid(element);
+ element.style.display = '';
+ return element;
+ },
+
+ remove: function(element) {
+ element = DOKUid(element);
+ element.parentNode.removeChild(element);
+ return element;
+ },
+
+ update: (function(){
+
+ var SELECT_ELEMENT_INNERHTML_BUGGY = (function(){
+ var el = document.createElement("select"),
+ isBuggy = true;
+ el.innerHTML = "<option value=\"test\">test</option>";
+ if (el.options && el.options[0]) {
+ isBuggy = el.options[0].nodeName.toUpperCase() !== "OPTION";
+ }
+ el = null;
+ return isBuggy;
+ })();
+
+ var TABLE_ELEMENT_INNERHTML_BUGGY = (function(){
+ try {
+ var el = document.createElement("table");
+ if (el && el.tBodies) {
+ el.innerHTML = "<tbody><tr><td>test</td></tr></tbody>";
+ var isBuggy = typeof el.tBodies[0] == "undefined";
+ el = null;
+ return isBuggy;
+ }
+ } catch (e) {
+ return true;
+ }
+ })();
+
+ var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING = (function () {
+ var s = document.createElement("script"),
+ isBuggy = false;
+ try {
+ s.appendChild(document.createTextNode(""));
+ isBuggy = !s.firstChild ||
+ s.firstChild && s.firstChild.nodeType !== 3;
+ } catch (e) {
+ isBuggy = true;
+ }
+ s = null;
+ return isBuggy;
+ })();
+
+ function update(element, content) {
+ element = DOKUid(element);
+
+ if (content && content.toElement)
+ content = content.toElement();
+
+ if (Object.isElement(content))
+ return element.update().insert(content);
+
+ content = Object.toHTML(content);
+
+ var tagName = element.tagName.toUpperCase();
+
+ if (tagName === 'SCRIPT' && SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING) {
+ element.text = content;
+ return element;
+ }
+
+ if (SELECT_ELEMENT_INNERHTML_BUGGY || TABLE_ELEMENT_INNERHTML_BUGGY) {
+ if (tagName in Element._insertionTranslations.tags) {
+ while (element.firstChild) {
+ element.removeChild(element.firstChild);
+ }
+ Element._getContentFromAnonymousElement(tagName, content.stripScripts())
+ .each(function(node) {
+ element.appendChild(node)
+ });
+ }
+ else {
+ element.innerHTML = content.stripScripts();
+ }
+ }
+ else {
+ element.innerHTML = content.stripScripts();
+ }
+
+ content.evalScripts.bind(content).defer();
+ return element;
+ }
+
+ return update;
+ })(),
+
+ replace: function(element, content) {
+ element = DOKUid(element);
+ if (content && content.toElement) content = content.toElement();
+ else if (!Object.isElement(content)) {
+ content = Object.toHTML(content);
+ var range = element.ownerDocument.createRange();
+ range.selectNode(element);
+ content.evalScripts.bind(content).defer();
+ content = range.createContextualFragment(content.stripScripts());
+ }
+ element.parentNode.replaceChild(content, element);
+ return element;
+ },
+
+ insert: function(element, insertions) {
+ element = DOKUid(element);
+
+ if (Object.isString(insertions) || Object.isNumber(insertions) ||
+ Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
+ insertions = {bottom:insertions};
+
+ var content, insert, tagName, childNodes;
+
+ for (var position in insertions) {
+ content = insertions[position];
+ position = position.toLowerCase();
+ insert = Element._insertionTranslations[position];
+
+ if (content && content.toElement) content = content.toElement();
+ if (Object.isElement(content)) {
+ insert(element, content);
+ continue;
+ }
+
+ content = Object.toHTML(content);
+
+ tagName = ((position == 'before' || position == 'after')
+ ? element.parentNode : element).tagName.toUpperCase();
+
+ childNodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
+
+ if (position == 'top' || position == 'after') childNodes.reverse();
+ childNodes.each(insert.curry(element));
+
+ content.evalScripts.bind(content).defer();
+ }
+
+ return element;
+ },
+
+ wrap: function(element, wrapper, attributes) {
+ element = DOKUid(element);
+ if (Object.isElement(wrapper))
+ DOKUid(wrapper).writeAttribute(attributes || { });
+ else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes);
+ else wrapper = new Element('div', wrapper);
+ if (element.parentNode)
+ element.parentNode.replaceChild(wrapper, element);
+ wrapper.appendChild(element);
+ return wrapper;
+ },
+
+ inspect: function(element) {
+ element = DOKUid(element);
+ var result = '<' + element.tagName.toLowerCase();
+ $H({'id': 'id', 'className': 'class'}).each(function(pair) {
+ var property = pair.first(), attribute = pair.last();
+ var value = (element[property] || '').toString();
+ if (value) result += ' ' + attribute + '=' + value.inspect(true);
+ });
+ return result + '>';
+ },
+
+ recursivelyCollect: function(element, property) {
+ element = DOKUid(element);
+ var elements = [];
+ while (element = element[property])
+ if (element.nodeType == 1)
+ elements.push(Element.extend(element));
+ return elements;
+ },
+
+ ancestors: function(element) {
+ return Element.recursivelyCollect(element, 'parentNode');
+ },
+
+ descendants: function(element) {
+ return Element.select(element, "*");
+ },
+
+ firstDescendant: function(element) {
+ element = DOKUid(element).firstChild;
+ while (element && element.nodeType != 1) element = element.nextSibling;
+ return DOKUid(element);
+ },
+
+ immediateDescendants: function(element) {
+ if (!(element = DOKUid(element).firstChild)) return [];
+ while (element && element.nodeType != 1) element = element.nextSibling;
+ if (element) return [element].concat(DOKUid(element).nextSiblings());
+ return [];
+ },
+
+ previousSiblings: function(element) {
+ return Element.recursivelyCollect(element, 'previousSibling');
+ },
+
+ nextSiblings: function(element) {
+ return Element.recursivelyCollect(element, 'nextSibling');
+ },
+
+ siblings: function(element) {
+ element = DOKUid(element);
+ return Element.previousSiblings(element).reverse()
+ .concat(Element.nextSiblings(element));
+ },
+
+ match: function(element, selector) {
+ if (Object.isString(selector))
+ selector = new Selector(selector);
+ return selector.match(DOKUid(element));
+ },
+
+ up: function(element, expression, index) {
+ element = DOKUid(element);
+ if (arguments.length == 1) return DOKUid(element.parentNode);
+ var ancestors = Element.ancestors(element);
+ return Object.isNumber(expression) ? ancestors[expression] :
+ Selector.findElement(ancestors, expression, index);
+ },
+
+ down: function(element, expression, index) {
+ element = DOKUid(element);
+ if (arguments.length == 1) return Element.firstDescendant(element);
+ return Object.isNumber(expression) ? Element.descendants(element)[expression] :
+ Element.select(element, expression)[index || 0];
+ },
+
+ previous: function(element, expression, index) {
+ element = DOKUid(element);
+ if (arguments.length == 1) return DOKUid(Selector.handlers.previousElementSibling(element));
+ var previousSiblings = Element.previousSiblings(element);
+ return Object.isNumber(expression) ? previousSiblings[expression] :
+ Selector.findElement(previousSiblings, expression, index);
+ },
+
+ next: function(element, expression, index) {
+ element = DOKUid(element);
+ if (arguments.length == 1) return DOKUid(Selector.handlers.nextElementSibling(element));
+ var nextSiblings = Element.nextSiblings(element);
+ return Object.isNumber(expression) ? nextSiblings[expression] :
+ Selector.findElement(nextSiblings, expression, index);
+ },
+
+
+ select: function(element) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ return Selector.findChildElements(element, args);
+ },
+
+ adjacent: function(element) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ return Selector.findChildElements(element.parentNode, args).without(element);
+ },
+
+ identify: function(element) {
+ element = DOKUid(element);
+ var id = Element.readAttribute(element, 'id');
+ if (id) return id;
+ do { id = 'anonymous_element_' + Element.idCounter++ } while (DOKUid(id));
+ Element.writeAttribute(element, 'id', id);
+ return id;
+ },
+
+ readAttribute: function(element, name) {
+ element = DOKUid(element);
+ if (Prototype.Browser.IE) {
+ var t = Element._attributeTranslations.read;
+ if (t.values[name]) return t.values[name](element, name);
+ if (t.names[name]) name = t.names[name];
+ if (name.include(':')) {
+ return (!element.attributes || !element.attributes[name]) ? null :
+ element.attributes[name].value;
+ }
+ }
+ return element.getAttribute(name);
+ },
+
+ writeAttribute: function(element, name, value) {
+ element = DOKUid(element);
+ var attributes = { }, t = Element._attributeTranslations.write;
+
+ if (typeof name == 'object') attributes = name;
+ else attributes[name] = Object.isUndefined(value) ? true : value;
+
+ for (var attr in attributes) {
+ name = t.names[attr] || attr;
+ value = attributes[attr];
+ if (t.values[attr]) name = t.values[attr](element, value);
+ if (value === false || value === null)
+ element.removeAttribute(name);
+ else if (value === true)
+ element.setAttribute(name, name);
+ else element.setAttribute(name, value);
+ }
+ return element;
+ },
+
+ getHeight: function(element) {
+ return Element.getDimensions(element).height;
+ },
+
+ getWidth: function(element) {
+ return Element.getDimensions(element).width;
+ },
+
+ classNames: function(element) {
+ return new Element.ClassNames(element);
+ },
+
+ hasClassName: function(element, className) {
+ if (!(element = DOKUid(element))) return;
+ var elementClassName = element.className;
+ return (elementClassName.length > 0 && (elementClassName == className ||
+ new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)));
+ },
+
+ addClassName: function(element, className) {
+ if (!(element = DOKUid(element))) return;
+ if (!Element.hasClassName(element, className))
+ element.className += (element.className ? ' ' : '') + className;
+ return element;
+ },
+
+ removeClassName: function(element, className) {
+ if (!(element = DOKUid(element))) return;
+ element.className = element.className.replace(
+ new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();
+ return element;
+ },
+
+ toggleClassName: function(element, className) {
+ if (!(element = DOKUid(element))) return;
+ return Element[Element.hasClassName(element, className) ?
+ 'removeClassName' : 'addClassName'](element, className);
+ },
+
+ cleanWhitespace: function(element) {
+ element = DOKUid(element);
+ var node = element.firstChild;
+ while (node) {
+ var nextNode = node.nextSibling;
+ if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
+ element.removeChild(node);
+ node = nextNode;
+ }
+ return element;
+ },
+
+ empty: function(element) {
+ return DOKUid(element).innerHTML.blank();
+ },
+
+ descendantOf: function(element, ancestor) {
+ element = DOKUid(element), ancestor = DOKUid(ancestor);
+
+ if (element.compareDocumentPosition)
+ return (element.compareDocumentPosition(ancestor) & 8) === 8;
+
+ if (ancestor.contains)
+ return ancestor.contains(element) && ancestor !== element;
+
+ while (element = element.parentNode)
+ if (element == ancestor) return true;
+
+ return false;
+ },
+
+ scrollTo: function(element) {
+ element = DOKUid(element);
+ var pos = Element.cumulativeOffset(element);
+ window.scrollTo(pos[0], pos[1]);
+ return element;
+ },
+
+ getStyle: function(element, style) {
+ element = DOKUid(element);
+ style = style == 'float' ? 'cssFloat' : style.camelize();
+ var value = element.style[style];
+ if (!value || value == 'auto') {
+ var css = document.defaultView.getComputedStyle(element, null);
+ value = css ? css[style] : null;
+ }
+ if (style == 'opacity') return value ? parseFloat(value) : 1.0;
+ return value == 'auto' ? null : value;
+ },
+
+ getOpacity: function(element) {
+ return DOKUid(element).getStyle('opacity');
+ },
+
+ setStyle: function(element, styles) {
+ element = DOKUid(element);
+ var elementStyle = element.style, match;
+ if (Object.isString(styles)) {
+ element.style.cssText += ';' + styles;
+ return styles.include('opacity') ?
+ element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element;
+ }
+ for (var property in styles)
+ if (property == 'opacity') element.setOpacity(styles[property]);
+ else
+ elementStyle[(property == 'float' || property == 'cssFloat') ?
+ (Object.isUndefined(elementStyle.styleFloat) ? 'cssFloat' : 'styleFloat') :
+ property] = styles[property];
+
+ return element;
+ },
+
+ setOpacity: function(element, value) {
+ element = DOKUid(element);
+ element.style.opacity = (value == 1 || value === '') ? '' :
+ (value < 0.00001) ? 0 : value;
+ return element;
+ },
+
+ getDimensions: function(element) {
+ element = DOKUid(element);
+ var display = Element.getStyle(element, 'display');
+ if (display != 'none' && display != null) // Safari bug
+ return {width: element.offsetWidth, height: element.offsetHeight};
+
+ var els = element.style;
+ var originalVisibility = els.visibility;
+ var originalPosition = els.position;
+ var originalDisplay = els.display;
+ els.visibility = 'hidden';
+ if (originalPosition != 'fixed') // Switching fixed to absolute causes issues in Safari
+ els.position = 'absolute';
+ els.display = 'block';
+ var originalWidth = element.clientWidth;
+ var originalHeight = element.clientHeight;
+ els.display = originalDisplay;
+ els.position = originalPosition;
+ els.visibility = originalVisibility;
+ return {width: originalWidth, height: originalHeight};
+ },
+
+ makePositioned: function(element) {
+ element = DOKUid(element);
+ var pos = Element.getStyle(element, 'position');
+ if (pos == 'static' || !pos) {
+ element._madePositioned = true;
+ element.style.position = 'relative';
+ if (Prototype.Browser.Opera) {
+ element.style.top = 0;
+ element.style.left = 0;
+ }
+ }
+ return element;
+ },
+
+ undoPositioned: function(element) {
+ element = DOKUid(element);
+ if (element._madePositioned) {
+ element._madePositioned = undefined;
+ element.style.position =
+ element.style.top =
+ element.style.left =
+ element.style.bottom =
+ element.style.right = '';
+ }
+ return element;
+ },
+
+ makeClipping: function(element) {
+ element = DOKUid(element);
+ if (element._overflow) return element;
+ element._overflow = Element.getStyle(element, 'overflow') || 'auto';
+ if (element._overflow !== 'hidden')
+ element.style.overflow = 'hidden';
+ return element;
+ },
+
+ undoClipping: function(element) {
+ element = DOKUid(element);
+ if (!element._overflow) return element;
+ element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
+ element._overflow = null;
+ return element;
+ },
+
+ cumulativeOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ element = element.offsetParent;
+ } while (element);
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ positionedOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ element = element.offsetParent;
+ if (element) {
+ if (element.tagName.toUpperCase() == 'BODY') break;
+ var p = Element.getStyle(element, 'position');
+ if (p !== 'static') break;
+ }
+ } while (element);
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ absolutize: function(element) {
+ element = DOKUid(element);
+ if (Element.getStyle(element, 'position') == 'absolute') return element;
+
+ var offsets = Element.positionedOffset(element);
+ var top = offsets[1];
+ var left = offsets[0];
+ var width = element.clientWidth;
+ var height = element.clientHeight;
+
+ element._originalLeft = left - parseFloat(element.style.left || 0);
+ element._originalTop = top - parseFloat(element.style.top || 0);
+ element._originalWidth = element.style.width;
+ element._originalHeight = element.style.height;
+
+ element.style.position = 'absolute';
+ element.style.top = top + 'px';
+ element.style.left = left + 'px';
+ element.style.width = width + 'px';
+ element.style.height = height + 'px';
+ return element;
+ },
+
+ relativize: function(element) {
+ element = DOKUid(element);
+ if (Element.getStyle(element, 'position') == 'relative') return element;
+
+ element.style.position = 'relative';
+ var top = parseFloat(element.style.top || 0) - (element._originalTop || 0);
+ var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
+
+ element.style.top = top + 'px';
+ element.style.left = left + 'px';
+ element.style.height = element._originalHeight;
+ element.style.width = element._originalWidth;
+ return element;
+ },
+
+ cumulativeScrollOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.scrollTop || 0;
+ valueL += element.scrollLeft || 0;
+ element = element.parentNode;
+ } while (element);
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ getOffsetParent: function(element) {
+ if (element.offsetParent) return DOKUid(element.offsetParent);
+ if (element == document.body) return DOKUid(element);
+
+ while ((element = element.parentNode) && element != document.body)
+ if (Element.getStyle(element, 'position') != 'static')
+ return DOKUid(element);
+
+ return DOKUid(document.body);
+ },
+
+ viewportOffset: function(forElement) {
+ var valueT = 0, valueL = 0;
+
+ var element = forElement;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+
+ if (element.offsetParent == document.body &&
+ Element.getStyle(element, 'position') == 'absolute') break;
+
+ } while (element = element.offsetParent);
+
+ element = forElement;
+ do {
+ if (!Prototype.Browser.Opera || (element.tagName && (element.tagName.toUpperCase() == 'BODY'))) {
+ valueT -= element.scrollTop || 0;
+ valueL -= element.scrollLeft || 0;
+ }
+ } while (element = element.parentNode);
+
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ clonePosition: function(element, source) {
+ var options = Object.extend({
+ setLeft: true,
+ setTop: true,
+ setWidth: true,
+ setHeight: true,
+ offsetTop: 0,
+ offsetLeft: 0
+ }, arguments[2] || { });
+
+ source = DOKUid(source);
+ var p = Element.viewportOffset(source);
+
+ element = DOKUid(element);
+ var delta = [0, 0];
+ var parent = null;
+ if (Element.getStyle(element, 'position') == 'absolute') {
+ parent = Element.getOffsetParent(element);
+ delta = Element.viewportOffset(parent);
+ }
+
+ if (parent == document.body) {
+ delta[0] -= document.body.offsetLeft;
+ delta[1] -= document.body.offsetTop;
+ }
+
+ if (options.setLeft) element.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px';
+ if (options.setTop) element.style.top = (p[1] - delta[1] + options.offsetTop) + 'px';
+ if (options.setWidth) element.style.width = source.offsetWidth + 'px';
+ if (options.setHeight) element.style.height = source.offsetHeight + 'px';
+ return element;
+ }
+};
+
+Object.extend(Element.Methods, {
+ getElementsBySelector: Element.Methods.select,
+
+ childElements: Element.Methods.immediateDescendants
+});
+
+Element._attributeTranslations = {
+ write: {
+ names: {
+ className: 'class',
+ htmlFor: 'for'
+ },
+ values: { }
+ }
+};
+
+if (Prototype.Browser.Opera) {
+ Element.Methods.getStyle = Element.Methods.getStyle.wrap(
+ function(proceed, element, style) {
+ switch (style) {
+ case 'left': case 'top': case 'right': case 'bottom':
+ if (proceed(element, 'position') === 'static') return null;
+ case 'height': case 'width':
+ if (!Element.visible(element)) return null;
+
+ var dim = parseInt(proceed(element, style), 10);
+
+ if (dim !== element['offset' + style.capitalize()])
+ return dim + 'px';
+
+ var properties;
+ if (style === 'height') {
+ properties = ['border-top-width', 'padding-top',
+ 'padding-bottom', 'border-bottom-width'];
+ }
+ else {
+ properties = ['border-left-width', 'padding-left',
+ 'padding-right', 'border-right-width'];
+ }
+ return properties.inject(dim, function(memo, property) {
+ var val = proceed(element, property);
+ return val === null ? memo : memo - parseInt(val, 10);
+ }) + 'px';
+ default: return proceed(element, style);
+ }
+ }
+ );
+
+ Element.Methods.readAttribute = Element.Methods.readAttribute.wrap(
+ function(proceed, element, attribute) {
+ if (attribute === 'title') return element.title;
+ return proceed(element, attribute);
+ }
+ );
+}
+
+else if (Prototype.Browser.IE) {
+ Element.Methods.getOffsetParent = Element.Methods.getOffsetParent.wrap(
+ function(proceed, element) {
+ element = DOKUid(element);
+ try { element.offsetParent }
+ catch(e) { return DOKUid(document.body) }
+ var position = element.getStyle('position');
+ if (position !== 'static') return proceed(element);
+ element.setStyle({ position: 'relative' });
+ var value = proceed(element);
+ element.setStyle({ position: position });
+ return value;
+ }
+ );
+
+ $w('positionedOffset viewportOffset').each(function(method) {
+ Element.Methods[method] = Element.Methods[method].wrap(
+ function(proceed, element) {
+ element = DOKUid(element);
+ try { element.offsetParent }
+ catch(e) { return Element._returnOffset(0,0) }
+ var position = element.getStyle('position');
+ if (position !== 'static') return proceed(element);
+ var offsetParent = element.getOffsetParent();
+ if (offsetParent && offsetParent.getStyle('position') === 'fixed')
+ offsetParent.setStyle({ zoom: 1 });
+ element.setStyle({ position: 'relative' });
+ var value = proceed(element);
+ element.setStyle({ position: position });
+ return value;
+ }
+ );
+ });
+
+ Element.Methods.cumulativeOffset = Element.Methods.cumulativeOffset.wrap(
+ function(proceed, element) {
+ try { element.offsetParent }
+ catch(e) { return Element._returnOffset(0,0) }
+ return proceed(element);
+ }
+ );
+
+ Element.Methods.getStyle = function(element, style) {
+ element = DOKUid(element);
+ style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize();
+ var value = element.style[style];
+ if (!value && element.currentStyle) value = element.currentStyle[style];
+
+ if (style == 'opacity') {
+ if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))
+ if (value[1]) return parseFloat(value[1]) / 100;
+ return 1.0;
+ }
+
+ if (value == 'auto') {
+ if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none'))
+ return element['offset' + style.capitalize()] + 'px';
+ return null;
+ }
+ return value;
+ };
+
+ Element.Methods.setOpacity = function(element, value) {
+ function stripAlpha(filter){
+ return filter.replace(/alpha\([^\)]*\)/gi,'');
+ }
+ element = DOKUid(element);
+ var currentStyle = element.currentStyle;
+ if ((currentStyle && !currentStyle.hasLayout) ||
+ (!currentStyle && element.style.zoom == 'normal'))
+ element.style.zoom = 1;
+
+ var filter = element.getStyle('filter'), style = element.style;
+ if (value == 1 || value === '') {
+ (filter = stripAlpha(filter)) ?
+ style.filter = filter : style.removeAttribute('filter');
+ return element;
+ } else if (value < 0.00001) value = 0;
+ style.filter = stripAlpha(filter) +
+ 'alpha(opacity=' + (value * 100) + ')';
+ return element;
+ };
+
+ Element._attributeTranslations = (function(){
+
+ var classProp = 'className';
+ var forProp = 'for';
+
+ var el = document.createElement('div');
+
+ el.setAttribute(classProp, 'x');
+
+ if (el.className !== 'x') {
+ el.setAttribute('class', 'x');
+ if (el.className === 'x') {
+ classProp = 'class';
+ }
+ }
+ el = null;
+
+ el = document.createElement('label');
+ el.setAttribute(forProp, 'x');
+ if (el.htmlFor !== 'x') {
+ el.setAttribute('htmlFor', 'x');
+ if (el.htmlFor === 'x') {
+ forProp = 'htmlFor';
+ }
+ }
+ el = null;
+
+ return {
+ read: {
+ names: {
+ 'class': classProp,
+ 'className': classProp,
+ 'for': forProp,
+ 'htmlFor': forProp
+ },
+ values: {
+ _getAttr: function(element, attribute) {
+ return element.getAttribute(attribute);
+ },
+ _getAttr2: function(element, attribute) {
+ return element.getAttribute(attribute, 2);
+ },
+ _getAttrNode: function(element, attribute) {
+ var node = element.getAttributeNode(attribute);
+ return node ? node.value : "";
+ },
+ _getEv: (function(){
+
+ var el = document.createElement('div');
+ el.onclick = Prototype.emptyFunction;
+ var value = el.getAttribute('onclick');
+ var f;
+
+ if (String(value).indexOf('{') > -1) {
+ f = function(element, attribute) {
+ attribute = element.getAttribute(attribute);
+ if (!attribute) return null;
+ attribute = attribute.toString();
+ attribute = attribute.split('{')[1];
+ attribute = attribute.split('}')[0];
+ return attribute.strip();
+ };
+ }
+ else if (value === '') {
+ f = function(element, attribute) {
+ attribute = element.getAttribute(attribute);
+ if (!attribute) return null;
+ return attribute.strip();
+ };
+ }
+ el = null;
+ return f;
+ })(),
+ _flag: function(element, attribute) {
+ return DOKUid(element).hasAttribute(attribute) ? attribute : null;
+ },
+ style: function(element) {
+ return element.style.cssText.toLowerCase();
+ },
+ title: function(element) {
+ return element.title;
+ }
+ }
+ }
+ }
+ })();
+
+ Element._attributeTranslations.write = {
+ names: Object.extend({
+ cellpadding: 'cellPadding',
+ cellspacing: 'cellSpacing'
+ }, Element._attributeTranslations.read.names),
+ values: {
+ checked: function(element, value) {
+ element.checked = !!value;
+ },
+
+ style: function(element, value) {
+ element.style.cssText = value ? value : '';
+ }
+ }
+ };
+
+ Element._attributeTranslations.has = {};
+
+ $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +
+ 'encType maxLength readOnly longDesc frameBorder').each(function(attr) {
+ Element._attributeTranslations.write.names[attr.toLowerCase()] = attr;
+ Element._attributeTranslations.has[attr.toLowerCase()] = attr;
+ });
+
+ (function(v) {
+ Object.extend(v, {
+ href: v._getAttr2,
+ src: v._getAttr2,
+ type: v._getAttr,
+ action: v._getAttrNode,
+ disabled: v._flag,
+ checked: v._flag,
+ readonly: v._flag,
+ multiple: v._flag,
+ onload: v._getEv,
+ onunload: v._getEv,
+ onclick: v._getEv,
+ ondblclick: v._getEv,
+ onmousedown: v._getEv,
+ onmouseup: v._getEv,
+ onmouseover: v._getEv,
+ onmousemove: v._getEv,
+ onmouseout: v._getEv,
+ onfocus: v._getEv,
+ onblur: v._getEv,
+ onkeypress: v._getEv,
+ onkeydown: v._getEv,
+ onkeyup: v._getEv,
+ onsubmit: v._getEv,
+ onreset: v._getEv,
+ onselect: v._getEv,
+ onchange: v._getEv
+ });
+ })(Element._attributeTranslations.read.values);
+
+ if (Prototype.BrowserFeatures.ElementExtensions) {
+ (function() {
+ function _descendants(element) {
+ var nodes = element.getElementsByTagName('*'), results = [];
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (node.tagName !== "!") // Filter out comment nodes.
+ results.push(node);
+ return results;
+ }
+
+ Element.Methods.down = function(element, expression, index) {
+ element = DOKUid(element);
+ if (arguments.length == 1) return element.firstDescendant();
+ return Object.isNumber(expression) ? _descendants(element)[expression] :
+ Element.select(element, expression)[index || 0];
+ }
+ })();
+ }
+
+}
+
+else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) {
+ Element.Methods.setOpacity = function(element, value) {
+ element = DOKUid(element);
+ element.style.opacity = (value == 1) ? 0.999999 :
+ (value === '') ? '' : (value < 0.00001) ? 0 : value;
+ return element;
+ };
+}
+
+else if (Prototype.Browser.WebKit) {
+ Element.Methods.setOpacity = function(element, value) {
+ element = DOKUid(element);
+ element.style.opacity = (value == 1 || value === '') ? '' :
+ (value < 0.00001) ? 0 : value;
+
+ if (value == 1)
+ if(element.tagName.toUpperCase() == 'IMG' && element.width) {
+ element.width++; element.width--;
+ } else try {
+ var n = document.createTextNode(' ');
+ element.appendChild(n);
+ element.removeChild(n);
+ } catch (e) { }
+
+ return element;
+ };
+
+ Element.Methods.cumulativeOffset = function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ if (element.offsetParent == document.body)
+ if (Element.getStyle(element, 'position') == 'absolute') break;
+
+ element = element.offsetParent;
+ } while (element);
+
+ return Element._returnOffset(valueL, valueT);
+ };
+}
+
+if ('outerHTML' in document.documentElement) {
+ Element.Methods.replace = function(element, content) {
+ element = DOKUid(element);
+
+ if (content && content.toElement) content = content.toElement();
+ if (Object.isElement(content)) {
+ element.parentNode.replaceChild(content, element);
+ return element;
+ }
+
+ content = Object.toHTML(content);
+ var parent = element.parentNode, tagName = parent.tagName.toUpperCase();
+
+ if (Element._insertionTranslations.tags[tagName]) {
+ var nextSibling = element.next();
+ var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
+ parent.removeChild(element);
+ if (nextSibling)
+ fragments.each(function(node) { parent.insertBefore(node, nextSibling) });
+ else
+ fragments.each(function(node) { parent.appendChild(node) });
+ }
+ else element.outerHTML = content.stripScripts();
+
+ content.evalScripts.bind(content).defer();
+ return element;
+ };
+}
+
+Element._returnOffset = function(l, t) {
+ var result = [l, t];
+ result.left = l;
+ result.top = t;
+ return result;
+};
+
+Element._getContentFromAnonymousElement = function(tagName, html) {
+ var div = new Element('div'), t = Element._insertionTranslations.tags[tagName];
+ if (t) {
+ div.innerHTML = t[0] + html + t[1];
+ t[2].times(function() { div = div.firstChild });
+ } else div.innerHTML = html;
+ return $A(div.childNodes);
+};
+
+Element._insertionTranslations = {
+ before: function(element, node) {
+ element.parentNode.insertBefore(node, element);
+ },
+ top: function(element, node) {
+ element.insertBefore(node, element.firstChild);
+ },
+ bottom: function(element, node) {
+ element.appendChild(node);
+ },
+ after: function(element, node) {
+ element.parentNode.insertBefore(node, element.nextSibling);
+ },
+ tags: {
+ TABLE: ['<table>', '</table>', 1],
+ TBODY: ['<table><tbody>', '</tbody></table>', 2],
+ TR: ['<table><tbody><tr>', '</tr></tbody></table>', 3],
+ TD: ['<table><tbody><tr><td>', '</td></tr></tbody></table>', 4],
+ SELECT: ['<select>', '</select>', 1]
+ }
+};
+
+(function() {
+ var tags = Element._insertionTranslations.tags;
+ Object.extend(tags, {
+ THEAD: tags.TBODY,
+ TFOOT: tags.TBODY,
+ TH: tags.TD
+ });
+})();
+
+Element.Methods.Simulated = {
+ hasAttribute: function(element, attribute) {
+ attribute = Element._attributeTranslations.has[attribute] || attribute;
+ var node = DOKUid(element).getAttributeNode(attribute);
+ return !!(node && node.specified);
+ }
+};
+
+Element.Methods.ByTag = { };
+
+Object.extend(Element, Element.Methods);
+
+(function(div) {
+
+ if (!Prototype.BrowserFeatures.ElementExtensions && div['__proto__']) {
+ window.HTMLElement = { };
+ window.HTMLElement.prototype = div['__proto__'];
+ Prototype.BrowserFeatures.ElementExtensions = true;
+ }
+
+ div = null;
+
+})(document.createElement('div'))
+
+Element.extend = (function() {
+
+ function checkDeficiency(tagName) {
+ if (typeof window.Element != 'undefined') {
+ var proto = window.Element.prototype;
+ if (proto) {
+ var id = '_' + (Math.random()+'').slice(2);
+ var el = document.createElement(tagName);
+ proto[id] = 'x';
+ var isBuggy = (el[id] !== 'x');
+ delete proto[id];
+ el = null;
+ return isBuggy;
+ }
+ }
+ return false;
+ }
+
+ function extendElementWith(element, methods) {
+ for (var property in methods) {
+ var value = methods[property];
+ if (Object.isFunction(value) && !(property in element))
+ element[property] = value.methodize();
+ }
+ }
+
+ var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY = checkDeficiency('object');
+
+ if (Prototype.BrowserFeatures.SpecificElementExtensions) {
+ if (HTMLOBJECTELEMENT_PROTOTYPE_BUGGY) {
+ return function(element) {
+ if (element && typeof element._extendedByPrototype == 'undefined') {
+ var t = element.tagName;
+ if (t && (/^(?:object|applet|embed)$/i.test(t))) {
+ extendElementWith(element, Element.Methods);
+ extendElementWith(element, Element.Methods.Simulated);
+ extendElementWith(element, Element.Methods.ByTag[t.toUpperCase()]);
+ }
+ }
+ return element;
+ }
+ }
+ return Prototype.K;
+ }
+
+ var Methods = { }, ByTag = Element.Methods.ByTag;
+
+ var extend = Object.extend(function(element) {
+ if (!element || typeof element._extendedByPrototype != 'undefined' ||
+ element.nodeType != 1 || element == window) return element;
+
+ var methods = Object.clone(Methods),
+ tagName = element.tagName.toUpperCase();
+
+ if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);
+
+ extendElementWith(element, methods);
+
+ element._extendedByPrototype = Prototype.emptyFunction;
+ return element;
+
+ }, {
+ refresh: function() {
+ if (!Prototype.BrowserFeatures.ElementExtensions) {
+ Object.extend(Methods, Element.Methods);
+ Object.extend(Methods, Element.Methods.Simulated);
+ }
+ }
+ });
+
+ extend.refresh();
+ return extend;
+})();
+
+Element.hasAttribute = function(element, attribute) {
+ if (element.hasAttribute) return element.hasAttribute(attribute);
+ return Element.Methods.Simulated.hasAttribute(element, attribute);
+};
+
+Element.addMethods = function(methods) {
+ var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag;
+
+ if (!methods) {
+ Object.extend(Form, Form.Methods);
+ Object.extend(Form.Element, Form.Element.Methods);
+ Object.extend(Element.Methods.ByTag, {
+ "FORM": Object.clone(Form.Methods),
+ "INPUT": Object.clone(Form.Element.Methods),
+ "SELECT": Object.clone(Form.Element.Methods),
+ "TEXTAREA": Object.clone(Form.Element.Methods)
+ });
+ }
+
+ if (arguments.length == 2) {
+ var tagName = methods;
+ methods = arguments[1];
+ }
+
+ if (!tagName) Object.extend(Element.Methods, methods || { });
+ else {
+ if (Object.isArray(tagName)) tagName.each(extend);
+ else extend(tagName);
+ }
+
+ function extend(tagName) {
+ tagName = tagName.toUpperCase();
+ if (!Element.Methods.ByTag[tagName])
+ Element.Methods.ByTag[tagName] = { };
+ Object.extend(Element.Methods.ByTag[tagName], methods);
+ }
+
+ function copy(methods, destination, onlyIfAbsent) {
+ onlyIfAbsent = onlyIfAbsent || false;
+ for (var property in methods) {
+ var value = methods[property];
+ if (!Object.isFunction(value)) continue;
+ if (!onlyIfAbsent || !(property in destination))
+ destination[property] = value.methodize();
+ }
+ }
+
+ function findDOMClass(tagName) {
+ var klass;
+ var trans = {
+ "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph",
+ "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList",
+ "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading",
+ "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote",
+ "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION":
+ "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD":
+ "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR":
+ "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET":
+ "FrameSet", "IFRAME": "IFrame"
+ };
+ if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element';
+ if (window[klass]) return window[klass];
+ klass = 'HTML' + tagName + 'Element';
+ if (window[klass]) return window[klass];
+ klass = 'HTML' + tagName.capitalize() + 'Element';
+ if (window[klass]) return window[klass];
+
+ var element = document.createElement(tagName);
+ var proto = element['__proto__'] || element.constructor.prototype;
+ element = null;
+ return proto;
+ }
+
+ var elementPrototype = window.HTMLElement ? HTMLElement.prototype :
+ Element.prototype;
+
+ if (F.ElementExtensions) {
+ copy(Element.Methods, elementPrototype);
+ copy(Element.Methods.Simulated, elementPrototype, true);
+ }
+
+ if (F.SpecificElementExtensions) {
+ for (var tag in Element.Methods.ByTag) {
+ var klass = findDOMClass(tag);
+ if (Object.isUndefined(klass)) continue;
+ copy(T[tag], klass.prototype);
+ }
+ }
+
+ Object.extend(Element, Element.Methods);
+ delete Element.ByTag;
+
+ if (Element.extend.refresh) Element.extend.refresh();
+ Element.cache = { };
+};
+
+
+document.viewport = {
+
+ getDimensions: function() {
+ return { width: this.getWidth(), height: this.getHeight() };
+ },
+
+ getScrollOffsets: function() {
+ return Element._returnOffset(
+ window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
+ window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);
+ }
+};
+
+(function(viewport) {
+ var B = Prototype.Browser, doc = document, element, property = {};
+
+ function getRootElement() {
+ if (B.WebKit && !doc.evaluate)
+ return document;
+
+ if (B.Opera && window.parseFloat(window.opera.version()) < 9.5)
+ return document.body;
+
+ return document.documentElement;
+ }
+
+ function define(D) {
+ if (!element) element = getRootElement();
+
+ property[D] = 'client' + D;
+
+ viewport['get' + D] = function() { return element[property[D]] };
+ return viewport['get' + D]();
+ }
+
+ viewport.getWidth = define.curry('Width');
+
+ viewport.getHeight = define.curry('Height');
+})(document.viewport);
+
+
+Element.Storage = {
+ UID: 1
+};
+
+Element.addMethods({
+ getStorage: function(element) {
+ if (!(element = DOKUid(element))) return;
+
+ var uid;
+ if (element === window) {
+ uid = 0;
+ } else {
+ if (typeof element._prototypeUID === "undefined")
+ element._prototypeUID = [Element.Storage.UID++];
+ uid = element._prototypeUID[0];
+ }
+
+ if (!Element.Storage[uid])
+ Element.Storage[uid] = $H();
+
+ return Element.Storage[uid];
+ },
+
+ store: function(element, key, value) {
+ if (!(element = DOKUid(element))) return;
+
+ if (arguments.length === 2) {
+ Element.getStorage(element).update(key);
+ } else {
+ Element.getStorage(element).set(key, value);
+ }
+
+ return element;
+ },
+
+ retrieve: function(element, key, defaultValue) {
+ if (!(element = DOKUid(element))) return;
+ var hash = Element.getStorage(element), value = hash.get(key);
+
+ if (Object.isUndefined(value)) {
+ hash.set(key, defaultValue);
+ value = defaultValue;
+ }
+
+ return value;
+ },
+
+ clone: function(element, deep) {
+ if (!(element = DOKUid(element))) return;
+ var clone = element.cloneNode(deep);
+ clone._prototypeUID = void 0;
+ if (deep) {
+ var descendants = Element.select(clone, '*'),
+ i = descendants.length;
+ while (i--) {
+ descendants[i]._prototypeUID = void 0;
+ }
+ }
+ return Element.extend(clone);
+ }
+});
+/* Portions of the Selector class are derived from Jack Slocum's DomQuery,
+ * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style
+ * license. Please see http://www.yui-ext.com/ for more information. */
+
+var Selector = Class.create({
+ initialize: function(expression) {
+ this.expression = expression.strip();
+
+ if (this.shouldUseSelectorsAPI()) {
+ this.mode = 'selectorsAPI';
+ } else if (this.shouldUseXPath()) {
+ this.mode = 'xpath';
+ this.compileXPathMatcher();
+ } else {
+ this.mode = "normal";
+ this.compileMatcher();
+ }
+
+ },
+
+ shouldUseXPath: (function() {
+
+ var IS_DESCENDANT_SELECTOR_BUGGY = (function(){
+ var isBuggy = false;
+ if (document.evaluate && window.XPathResult) {
+ var el = document.createElement('div');
+ el.innerHTML = '<ul><li></li></ul><div><ul><li></li></ul></div>';
+
+ var xpath = ".//*[local-name()='ul' or local-name()='UL']" +
+ "//*[local-name()='li' or local-name()='LI']";
+
+ var result = document.evaluate(xpath, el, null,
+ XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
+
+ isBuggy = (result.snapshotLength !== 2);
+ el = null;
+ }
+ return isBuggy;
+ })();
+
+ return function() {
+ if (!Prototype.BrowserFeatures.XPath) return false;
+
+ var e = this.expression;
+
+ if (Prototype.Browser.WebKit &&
+ (e.include("-of-type") || e.include(":empty")))
+ return false;
+
+ if ((/(\[[\w-]*?:|:checked)/).test(e))
+ return false;
+
+ if (IS_DESCENDANT_SELECTOR_BUGGY) return false;
+
+ return true;
+ }
+
+ })(),
+
+ shouldUseSelectorsAPI: function() {
+ if (!Prototype.BrowserFeatures.SelectorsAPI) return false;
+
+ if (Selector.CASE_INSENSITIVE_CLASS_NAMES) return false;
+
+ if (!Selector._div) Selector._div = new Element('div');
+
+ try {
+ Selector._div.querySelector(this.expression);
+ } catch(e) {
+ return false;
+ }
+
+ return true;
+ },
+
+ compileMatcher: function() {
+ var e = this.expression, ps = Selector.patterns, h = Selector.handlers,
+ c = Selector.criteria, le, p, m, len = ps.length, name;
+
+ if (Selector._cache[e]) {
+ this.matcher = Selector._cache[e];
+ return;
+ }
+
+ this.matcher = ["this.matcher = function(root) {",
+ "var r = root, h = Selector.handlers, c = false, n;"];
+
+ while (e && le != e && (/\S/).test(e)) {
+ le = e;
+ for (var i = 0; i<len; i++) {
+ p = ps[i].re;
+ name = ps[i].name;
+ if (m = e.match(p)) {
+ this.matcher.push(Object.isFunction(c[name]) ? c[name](m) :
+ new Template(c[name]).evaluate(m));
+ e = e.replace(m[0], '');
+ break;
+ }
+ }
+ }
+
+ this.matcher.push("return h.unique(n);\n}");
+ eval(this.matcher.join('\n'));
+ Selector._cache[this.expression] = this.matcher;
+ },
+
+ compileXPathMatcher: function() {
+ var e = this.expression, ps = Selector.patterns,
+ x = Selector.xpath, le, m, len = ps.length, name;
+
+ if (Selector._cache[e]) {
+ this.xpath = Selector._cache[e]; return;
+ }
+
+ this.matcher = ['.//*'];
+ while (e && le != e && (/\S/).test(e)) {
+ le = e;
+ for (var i = 0; i<len; i++) {
+ name = ps[i].name;
+ if (m = e.match(ps[i].re)) {
+ this.matcher.push(Object.isFunction(x[name]) ? x[name](m) :
+ new Template(x[name]).evaluate(m));
+ e = e.replace(m[0], '');
+ break;
+ }
+ }
+ }
+
+ this.xpath = this.matcher.join('');
+ Selector._cache[this.expression] = this.xpath;
+ },
+
+ findElements: function(root) {
+ root = root || document;
+ var e = this.expression, results;
+
+ switch (this.mode) {
+ case 'selectorsAPI':
+ if (root !== document) {
+ var oldId = root.id, id = DOKUid(root).identify();
+ id = id.replace(/([\.:])/g, "\\$1");
+ e = "#" + id + " " + e;
+ }
+
+ results = $A(root.querySelectorAll(e)).map(Element.extend);
+ root.id = oldId;
+
+ return results;
+ case 'xpath':
+ return document._getElementsByXPath(this.xpath, root);
+ default:
+ return this.matcher(root);
+ }
+ },
+
+ match: function(element) {
+ this.tokens = [];
+
+ var e = this.expression, ps = Selector.patterns, as = Selector.assertions;
+ var le, p, m, len = ps.length, name;
+
+ while (e && le !== e && (/\S/).test(e)) {
+ le = e;
+ for (var i = 0; i<len; i++) {
+ p = ps[i].re;
+ name = ps[i].name;
+ if (m = e.match(p)) {
+ if (as[name]) {
+ this.tokens.push([name, Object.clone(m)]);
+ e = e.replace(m[0], '');
+ } else {
+ return this.findElements(document).include(element);
+ }
+ }
+ }
+ }
+
+ var match = true, name, matches;
+ for (var i = 0, token; token = this.tokens[i]; i++) {
+ name = token[0], matches = token[1];
+ if (!Selector.assertions[name](element, matches)) {
+ match = false; break;
+ }
+ }
+
+ return match;
+ },
+
+ toString: function() {
+ return this.expression;
+ },
+
+ inspect: function() {
+ return "#<Selector:" + this.expression.inspect() + ">";
+ }
+});
+
+if (Prototype.BrowserFeatures.SelectorsAPI &&
+ document.compatMode === 'BackCompat') {
+ Selector.CASE_INSENSITIVE_CLASS_NAMES = (function(){
+ var div = document.createElement('div'),
+ span = document.createElement('span');
+
+ div.id = "prototype_test_id";
+ span.className = 'Test';
+ div.appendChild(span);
+ var isIgnored = (div.querySelector('#prototype_test_id .test') !== null);
+ div = span = null;
+ return isIgnored;
+ })();
+}
+
+Object.extend(Selector, {
+ _cache: { },
+
+ xpath: {
+ descendant: "//*",
+ child: "/*",
+ adjacent: "/following-sibling::*[1]",
+ laterSibling: '/following-sibling::*',
+ tagName: function(m) {
+ if (m[1] == '*') return '';
+ return "[local-name()='" + m[1].toLowerCase() +
+ "' or local-name()='" + m[1].toUpperCase() + "']";
+ },
+ className: "[contains(concat(' ', @class, ' '), ' #{1} ')]",
+ id: "[@id='#{1}']",
+ attrPresence: function(m) {
+ m[1] = m[1].toLowerCase();
+ return new Template("[@#{1}]").evaluate(m);
+ },
+ attr: function(m) {
+ m[1] = m[1].toLowerCase();
+ m[3] = m[5] || m[6];
+ return new Template(Selector.xpath.operators[m[2]]).evaluate(m);
+ },
+ pseudo: function(m) {
+ var h = Selector.xpath.pseudos[m[1]];
+ if (!h) return '';
+ if (Object.isFunction(h)) return h(m);
+ return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);
+ },
+ operators: {
+ '=': "[@#{1}='#{3}']",
+ '!=': "[@#{1}!='#{3}']",
+ '^=': "[starts-with(@#{1}, '#{3}')]",
+ '$=': "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']",
+ '*=': "[contains(@#{1}, '#{3}')]",
+ '~=': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",
+ '|=': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"
+ },
+ pseudos: {
+ 'first-child': '[not(preceding-sibling::*)]',
+ 'last-child': '[not(following-sibling::*)]',
+ 'only-child': '[not(preceding-sibling::* or following-sibling::*)]',
+ 'empty': "[count(*) = 0 and (count(text()) = 0)]",
+ 'checked': "[@checked]",
+ 'disabled': "[(@disabled) and (@type!='hidden')]",
+ 'enabled': "[not(@disabled) and (@type!='hidden')]",
+ 'not': function(m) {
+ var e = m[6], p = Selector.patterns,
+ x = Selector.xpath, le, v, len = p.length, name;
+
+ var exclusion = [];
+ while (e && le != e && (/\S/).test(e)) {
+ le = e;
+ for (var i = 0; i<len; i++) {
+ name = p[i].name
+ if (m = e.match(p[i].re)) {
+ v = Object.isFunction(x[name]) ? x[name](m) : new Template(x[name]).evaluate(m);
+ exclusion.push("(" + v.substring(1, v.length - 1) + ")");
+ e = e.replace(m[0], '');
+ break;
+ }
+ }
+ }
+ return "[not(" + exclusion.join(" and ") + ")]";
+ },
+ 'nth-child': function(m) {
+ return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m);
+ },
+ 'nth-last-child': function(m) {
+ return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m);
+ },
+ 'nth-of-type': function(m) {
+ return Selector.xpath.pseudos.nth("position() ", m);
+ },
+ 'nth-last-of-type': function(m) {
+ return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m);
+ },
+ 'first-of-type': function(m) {
+ m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m);
+ },
+ 'last-of-type': function(m) {
+ m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m);
+ },
+ 'only-of-type': function(m) {
+ var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m);
+ },
+ nth: function(fragment, m) {
+ var mm, formula = m[6], predicate;
+ if (formula == 'even') formula = '2n+0';
+ if (formula == 'odd') formula = '2n+1';
+ if (mm = formula.match(/^(\d+)$/)) // digit only
+ return '[' + fragment + "= " + mm[1] + ']';
+ if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
+ if (mm[1] == "-") mm[1] = -1;
+ var a = mm[1] ? Number(mm[1]) : 1;
+ var b = mm[2] ? Number(mm[2]) : 0;
+ predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " +
+ "((#{fragment} - #{b}) div #{a} >= 0)]";
+ return new Template(predicate).evaluate({
+ fragment: fragment, a: a, b: b });
+ }
+ }
+ }
+ },
+
+ criteria: {
+ tagName: 'n = h.tagName(n, r, "#{1}", c); c = false;',
+ className: 'n = h.className(n, r, "#{1}", c); c = false;',
+ id: 'n = h.id(n, r, "#{1}", c); c = false;',
+ attrPresence: 'n = h.attrPresence(n, r, "#{1}", c); c = false;',
+ attr: function(m) {
+ m[3] = (m[5] || m[6]);
+ return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(m);
+ },
+ pseudo: function(m) {
+ if (m[6]) m[6] = m[6].replace(/"/g, '\\"');
+ return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m);
+ },
+ descendant: 'c = "descendant";',
+ child: 'c = "child";',
+ adjacent: 'c = "adjacent";',
+ laterSibling: 'c = "laterSibling";'
+ },
+
+ patterns: [
+ { name: 'laterSibling', re: /^\s*~\s*/ },
+ { name: 'child', re: /^\s*>\s*/ },
+ { name: 'adjacent', re: /^\s*\+\s*/ },
+ { name: 'descendant', re: /^\s/ },
+
+ { name: 'tagName', re: /^\s*(\*|[\w\-]+)(\b|$)?/ },
+ { name: 'id', re: /^#([\w\-\*]+)(\b|$)/ },
+ { name: 'className', re: /^\.([\w\-\*]+)(\b|$)/ },
+ { name: 'pseudo', re: /^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/ },
+ { name: 'attrPresence', re: /^\[((?:[\w-]+:)?[\w-]+)\]/ },
+ { name: 'attr', re: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/ }
+ ],
+
+ assertions: {
+ tagName: function(element, matches) {
+ return matches[1].toUpperCase() == element.tagName.toUpperCase();
+ },
+
+ className: function(element, matches) {
+ return Element.hasClassName(element, matches[1]);
+ },
+
+ id: function(element, matches) {
+ return element.id === matches[1];
+ },
+
+ attrPresence: function(element, matches) {
+ return Element.hasAttribute(element, matches[1]);
+ },
+
+ attr: function(element, matches) {
+ var nodeValue = Element.readAttribute(element, matches[1]);
+ return nodeValue && Selector.operators[matches[2]](nodeValue, matches[5] || matches[6]);
+ }
+ },
+
+ handlers: {
+ concat: function(a, b) {
+ for (var i = 0, node; node = b[i]; i++)
+ a.push(node);
+ return a;
+ },
+
+ mark: function(nodes) {
+ var _true = Prototype.emptyFunction;
+ for (var i = 0, node; node = nodes[i]; i++)
+ node._countedByPrototype = _true;
+ return nodes;
+ },
+
+ unmark: (function(){
+
+ var PROPERTIES_ATTRIBUTES_MAP = (function(){
+ var el = document.createElement('div'),
+ isBuggy = false,
+ propName = '_countedByPrototype',
+ value = 'x'
+ el[propName] = value;
+ isBuggy = (el.getAttribute(propName) === value);
+ el = null;
+ return isBuggy;
+ })();
+
+ return PROPERTIES_ATTRIBUTES_MAP ?
+ function(nodes) {
+ for (var i = 0, node; node = nodes[i]; i++)
+ node.removeAttribute('_countedByPrototype');
+ return nodes;
+ } :
+ function(nodes) {
+ for (var i = 0, node; node = nodes[i]; i++)
+ node._countedByPrototype = void 0;
+ return nodes;
+ }
+ })(),
+
+ index: function(parentNode, reverse, ofType) {
+ parentNode._countedByPrototype = Prototype.emptyFunction;
+ if (reverse) {
+ for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) {
+ var node = nodes[i];
+ if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
+ }
+ } else {
+ for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++)
+ if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
+ }
+ },
+
+ unique: function(nodes) {
+ if (nodes.length == 0) return nodes;
+ var results = [], n;
+ for (var i = 0, l = nodes.length; i < l; i++)
+ if (typeof (n = nodes[i])._countedByPrototype == 'undefined') {
+ n._countedByPrototype = Prototype.emptyFunction;
+ results.push(Element.extend(n));
+ }
+ return Selector.handlers.unmark(results);
+ },
+
+ descendant: function(nodes) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ h.concat(results, node.getElementsByTagName('*'));
+ return results;
+ },
+
+ child: function(nodes) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ for (var j = 0, child; child = node.childNodes[j]; j++)
+ if (child.nodeType == 1 && child.tagName != '!') results.push(child);
+ }
+ return results;
+ },
+
+ adjacent: function(nodes) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ var next = this.nextElementSibling(node);
+ if (next) results.push(next);
+ }
+ return results;
+ },
+
+ laterSibling: function(nodes) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ h.concat(results, Element.nextSiblings(node));
+ return results;
+ },
+
+ nextElementSibling: function(node) {
+ while (node = node.nextSibling)
+ if (node.nodeType == 1) return node;
+ return null;
+ },
+
+ previousElementSibling: function(node) {
+ while (node = node.previousSibling)
+ if (node.nodeType == 1) return node;
+ return null;
+ },
+
+ tagName: function(nodes, root, tagName, combinator) {
+ var uTagName = tagName.toUpperCase();
+ var results = [], h = Selector.handlers;
+ if (nodes) {
+ if (combinator) {
+ if (combinator == "descendant") {
+ for (var i = 0, node; node = nodes[i]; i++)
+ h.concat(results, node.getElementsByTagName(tagName));
+ return results;
+ } else nodes = this[combinator](nodes);
+ if (tagName == "*") return nodes;
+ }
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (node.tagName.toUpperCase() === uTagName) results.push(node);
+ return results;
+ } else return root.getElementsByTagName(tagName);
+ },
+
+ id: function(nodes, root, id, combinator) {
+ var targetNode = DOKUid(id), h = Selector.handlers;
+
+ if (root == document) {
+ if (!targetNode) return [];
+ if (!nodes) return [targetNode];
+ } else {
+ if (!root.sourceIndex || root.sourceIndex < 1) {
+ var nodes = root.getElementsByTagName('*');
+ for (var j = 0, node; node = nodes[j]; j++) {
+ if (node.id === id) return [node];
+ }
+ }
+ }
+
+ if (nodes) {
+ if (combinator) {
+ if (combinator == 'child') {
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (targetNode.parentNode == node) return [targetNode];
+ } else if (combinator == 'descendant') {
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (Element.descendantOf(targetNode, node)) return [targetNode];
+ } else if (combinator == 'adjacent') {
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (Selector.handlers.previousElementSibling(targetNode) == node)
+ return [targetNode];
+ } else nodes = h[combinator](nodes);
+ }
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (node == targetNode) return [targetNode];
+ return [];
+ }
+ return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : [];
+ },
+
+ className: function(nodes, root, className, combinator) {
+ if (nodes && combinator) nodes = this[combinator](nodes);
+ return Selector.handlers.byClassName(nodes, root, className);
+ },
+
+ byClassName: function(nodes, root, className) {
+ if (!nodes) nodes = Selector.handlers.descendant([root]);
+ var needle = ' ' + className + ' ';
+ for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) {
+ nodeClassName = node.className;
+ if (nodeClassName.length == 0) continue;
+ if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle))
+ results.push(node);
+ }
+ return results;
+ },
+
+ attrPresence: function(nodes, root, attr, combinator) {
+ if (!nodes) nodes = root.getElementsByTagName("*");
+ if (nodes && combinator) nodes = this[combinator](nodes);
+ var results = [];
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (Element.hasAttribute(node, attr)) results.push(node);
+ return results;
+ },
+
+ attr: function(nodes, root, attr, value, operator, combinator) {
+ if (!nodes) nodes = root.getElementsByTagName("*");
+ if (nodes && combinator) nodes = this[combinator](nodes);
+ var handler = Selector.operators[operator], results = [];
+ for (var i = 0, node; node = nodes[i]; i++) {
+ var nodeValue = Element.readAttribute(node, attr);
+ if (nodeValue === null) continue;
+ if (handler(nodeValue, value)) results.push(node);
+ }
+ return results;
+ },
+
+ pseudo: function(nodes, name, value, root, combinator) {
+ if (nodes && combinator) nodes = this[combinator](nodes);
+ if (!nodes) nodes = root.getElementsByTagName("*");
+ return Selector.pseudos[name](nodes, value, root);
+ }
+ },
+
+ pseudos: {
+ 'first-child': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ if (Selector.handlers.previousElementSibling(node)) continue;
+ results.push(node);
+ }
+ return results;
+ },
+ 'last-child': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ if (Selector.handlers.nextElementSibling(node)) continue;
+ results.push(node);
+ }
+ return results;
+ },
+ 'only-child': function(nodes, value, root) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (!h.previousElementSibling(node) && !h.nextElementSibling(node))
+ results.push(node);
+ return results;
+ },
+ 'nth-child': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root);
+ },
+ 'nth-last-child': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root, true);
+ },
+ 'nth-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root, false, true);
+ },
+ 'nth-last-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root, true, true);
+ },
+ 'first-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, "1", root, false, true);
+ },
+ 'last-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, "1", root, true, true);
+ },
+ 'only-of-type': function(nodes, formula, root) {
+ var p = Selector.pseudos;
+ return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root);
+ },
+
+ getIndices: function(a, b, total) {
+ if (a == 0) return b > 0 ? [b] : [];
+ return $R(1, total).inject([], function(memo, i) {
+ if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i);
+ return memo;
+ });
+ },
+
+ nth: function(nodes, formula, root, reverse, ofType) {
+ if (nodes.length == 0) return [];
+ if (formula == 'even') formula = '2n+0';
+ if (formula == 'odd') formula = '2n+1';
+ var h = Selector.handlers, results = [], indexed = [], m;
+ h.mark(nodes);
+ for (var i = 0, node; node = nodes[i]; i++) {
+ if (!node.parentNode._countedByPrototype) {
+ h.index(node.parentNode, reverse, ofType);
+ indexed.push(node.parentNode);
+ }
+ }
+ if (formula.match(/^\d+$/)) { // just a number
+ formula = Number(formula);
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (node.nodeIndex == formula) results.push(node);
+ } else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
+ if (m[1] == "-") m[1] = -1;
+ var a = m[1] ? Number(m[1]) : 1;
+ var b = m[2] ? Number(m[2]) : 0;
+ var indices = Selector.pseudos.getIndices(a, b, nodes.length);
+ for (var i = 0, node, l = indices.length; node = nodes[i]; i++) {
+ for (var j = 0; j < l; j++)
+ if (node.nodeIndex == indices[j]) results.push(node);
+ }
+ }
+ h.unmark(nodes);
+ h.unmark(indexed);
+ return results;
+ },
+
+ 'empty': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ if (node.tagName == '!' || node.firstChild) continue;
+ results.push(node);
+ }
+ return results;
+ },
+
+ 'not': function(nodes, selector, root) {
+ var h = Selector.handlers, selectorType, m;
+ var exclusions = new Selector(selector).findElements(root);
+ h.mark(exclusions);
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (!node._countedByPrototype) results.push(node);
+ h.unmark(exclusions);
+ return results;
+ },
+
+ 'enabled': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (!node.disabled && (!node.type || node.type !== 'hidden'))
+ results.push(node);
+ return results;
+ },
+
+ 'disabled': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (node.disabled) results.push(node);
+ return results;
+ },
+
+ 'checked': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (node.checked) results.push(node);
+ return results;
+ }
+ },
+
+ operators: {
+ '=': function(nv, v) { return nv == v; },
+ '!=': function(nv, v) { return nv != v; },
+ '^=': function(nv, v) { return nv == v || nv && nv.startsWith(v); },
+ '$=': function(nv, v) { return nv == v || nv && nv.endsWith(v); },
+ '*=': function(nv, v) { return nv == v || nv && nv.include(v); },
+ '~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); },
+ '|=': function(nv, v) { return ('-' + (nv || "").toUpperCase() +
+ '-').include('-' + (v || "").toUpperCase() + '-'); }
+ },
+
+ split: function(expression) {
+ var expressions = [];
+ expression.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
+ expressions.push(m[1].strip());
+ });
+ return expressions;
+ },
+
+ matchElements: function(elements, expression) {
+ var matches = $$(expression), h = Selector.handlers;
+ h.mark(matches);
+ for (var i = 0, results = [], element; element = elements[i]; i++)
+ if (element._countedByPrototype) results.push(element);
+ h.unmark(matches);
+ return results;
+ },
+
+ findElement: function(elements, expression, index) {
+ if (Object.isNumber(expression)) {
+ index = expression; expression = false;
+ }
+ return Selector.matchElements(elements, expression || '*')[index || 0];
+ },
+
+ findChildElements: function(element, expressions) {
+ expressions = Selector.split(expressions.join(','));
+ var results = [], h = Selector.handlers;
+ for (var i = 0, l = expressions.length, selector; i < l; i++) {
+ selector = new Selector(expressions[i].strip());
+ h.concat(results, selector.findElements(element));
+ }
+ return (l > 1) ? h.unique(results) : results;
+ }
+});
+
+if (Prototype.Browser.IE) {
+ Object.extend(Selector.handlers, {
+ concat: function(a, b) {
+ for (var i = 0, node; node = b[i]; i++)
+ if (node.tagName !== "!") a.push(node);
+ return a;
+ }
+ });
+}
+
+function $$() {
+ return Selector.findChildElements(document, $A(arguments));
+}
+
+var Form = {
+ reset: function(form) {
+ form = DOKUid(form);
+ form.reset();
+ return form;
+ },
+
+ serializeElements: function(elements, options) {
+ if (typeof options != 'object') options = { hash: !!options };
+ else if (Object.isUndefined(options.hash)) options.hash = true;
+ var key, value, submitted = false, submit = options.submit;
+
+ var data = elements.inject({ }, function(result, element) {
+ if (!element.disabled && element.name) {
+ key = element.name; value = DOKUid(element).getValue();
+ if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted &&
+ submit !== false && (!submit || key == submit) && (submitted = true)))) {
+ if (key in result) {
+ if (!Object.isArray(result[key])) result[key] = [result[key]];
+ result[key].push(value);
+ }
+ else result[key] = value;
+ }
+ }
+ return result;
+ });
+
+ return options.hash ? data : Object.toQueryString(data);
+ }
+};
+
+Form.Methods = {
+ serialize: function(form, options) {
+ return Form.serializeElements(Form.getElements(form), options);
+ },
+
+ getElements: function(form) {
+ var elements = DOKUid(form).getElementsByTagName('*'),
+ element,
+ arr = [ ],
+ serializers = Form.Element.Serializers;
+ for (var i = 0; element = elements[i]; i++) {
+ arr.push(element);
+ }
+ return arr.inject([], function(elements, child) {
+ if (serializers[child.tagName.toLowerCase()])
+ elements.push(Element.extend(child));
+ return elements;
+ })
+ },
+
+ getInputs: function(form, typeName, name) {
+ form = DOKUid(form);
+ var inputs = form.getElementsByTagName('input');
+
+ if (!typeName && !name) return $A(inputs).map(Element.extend);
+
+ for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
+ var input = inputs[i];
+ if ((typeName && input.type != typeName) || (name && input.name != name))
+ continue;
+ matchingInputs.push(Element.extend(input));
+ }
+
+ return matchingInputs;
+ },
+
+ disable: function(form) {
+ form = DOKUid(form);
+ Form.getElements(form).invoke('disable');
+ return form;
+ },
+
+ enable: function(form) {
+ form = DOKUid(form);
+ Form.getElements(form).invoke('enable');
+ return form;
+ },
+
+ findFirstElement: function(form) {
+ var elements = DOKUid(form).getElements().findAll(function(element) {
+ return 'hidden' != element.type && !element.disabled;
+ });
+ var firstByIndex = elements.findAll(function(element) {
+ return element.hasAttribute('tabIndex') && element.tabIndex >= 0;
+ }).sortBy(function(element) { return element.tabIndex }).first();
+
+ return firstByIndex ? firstByIndex : elements.find(function(element) {
+ return /^(?:input|select|textarea)$/i.test(element.tagName);
+ });
+ },
+
+ focusFirstElement: function(form) {
+ form = DOKUid(form);
+ form.findFirstElement().activate();
+ return form;
+ },
+
+ request: function(form, options) {
+ form = DOKUid(form), options = Object.clone(options || { });
+
+ var params = options.parameters, action = form.readAttribute('action') || '';
+ if (action.blank()) action = window.location.href;
+ options.parameters = form.serialize(true);
+
+ if (params) {
+ if (Object.isString(params)) params = params.toQueryParams();
+ Object.extend(options.parameters, params);
+ }
+
+ if (form.hasAttribute('method') && !options.method)
+ options.method = form.method;
+
+ return new Ajax.Request(action, options);
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+
+Form.Element = {
+ focus: function(element) {
+ DOKUid(element).focus();
+ return element;
+ },
+
+ select: function(element) {
+ DOKUid(element).select();
+ return element;
+ }
+};
+
+Form.Element.Methods = {
+
+ serialize: function(element) {
+ element = DOKUid(element);
+ if (!element.disabled && element.name) {
+ var value = element.getValue();
+ if (value != undefined) {
+ var pair = { };
+ pair[element.name] = value;
+ return Object.toQueryString(pair);
+ }
+ }
+ return '';
+ },
+
+ getValue: function(element) {
+ element = DOKUid(element);
+ var method = element.tagName.toLowerCase();
+ return Form.Element.Serializers[method](element);
+ },
+
+ setValue: function(element, value) {
+ element = DOKUid(element);
+ var method = element.tagName.toLowerCase();
+ Form.Element.Serializers[method](element, value);
+ return element;
+ },
+
+ clear: function(element) {
+ DOKUid(element).value = '';
+ return element;
+ },
+
+ present: function(element) {
+ return DOKUid(element).value != '';
+ },
+
+ activate: function(element) {
+ element = DOKUid(element);
+ try {
+ element.focus();
+ if (element.select && (element.tagName.toLowerCase() != 'input' ||
+ !(/^(?:button|reset|submit)$/i.test(element.type))))
+ element.select();
+ } catch (e) { }
+ return element;
+ },
+
+ disable: function(element) {
+ element = DOKUid(element);
+ element.disabled = true;
+ return element;
+ },
+
+ enable: function(element) {
+ element = DOKUid(element);
+ element.disabled = false;
+ return element;
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+var Field = Form.Element;
+
+var $F = Form.Element.Methods.getValue;
+
+/*--------------------------------------------------------------------------*/
+
+Form.Element.Serializers = {
+ input: function(element, value) {
+ switch (element.type.toLowerCase()) {
+ case 'checkbox':
+ case 'radio':
+ return Form.Element.Serializers.inputSelector(element, value);
+ default:
+ return Form.Element.Serializers.textarea(element, value);
+ }
+ },
+
+ inputSelector: function(element, value) {
+ if (Object.isUndefined(value)) return element.checked ? element.value : null;
+ else element.checked = !!value;
+ },
+
+ textarea: function(element, value) {
+ if (Object.isUndefined(value)) return element.value;
+ else element.value = value;
+ },
+
+ select: function(element, value) {
+ if (Object.isUndefined(value))
+ return this[element.type == 'select-one' ?
+ 'selectOne' : 'selectMany'](element);
+ else {
+ var opt, currentValue, single = !Object.isArray(value);
+ for (var i = 0, length = element.length; i < length; i++) {
+ opt = element.options[i];
+ currentValue = this.optionValue(opt);
+ if (single) {
+ if (currentValue == value) {
+ opt.selected = true;
+ return;
+ }
+ }
+ else opt.selected = value.include(currentValue);
+ }
+ }
+ },
+
+ selectOne: function(element) {
+ var index = element.selectedIndex;
+ return index >= 0 ? this.optionValue(element.options[index]) : null;
+ },
+
+ selectMany: function(element) {
+ var values, length = element.length;
+ if (!length) return null;
+
+ for (var i = 0, values = []; i < length; i++) {
+ var opt = element.options[i];
+ if (opt.selected) values.push(this.optionValue(opt));
+ }
+ return values;
+ },
+
+ optionValue: function(opt) {
+ return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+
+Abstract.TimedObserver = Class.create(PeriodicalExecuter, {
+ initialize: function($super, element, frequency, callback) {
+ $super(callback, frequency);
+ this.element = DOKUid(element);
+ this.lastValue = this.getValue();
+ },
+
+ execute: function() {
+ var value = this.getValue();
+ if (Object.isString(this.lastValue) && Object.isString(value) ?
+ this.lastValue != value : String(this.lastValue) != String(value)) {
+ this.callback(this.element, value);
+ this.lastValue = value;
+ }
+ }
+});
+
+Form.Element.Observer = Class.create(Abstract.TimedObserver, {
+ getValue: function() {
+ return Form.Element.getValue(this.element);
+ }
+});
+
+Form.Observer = Class.create(Abstract.TimedObserver, {
+ getValue: function() {
+ return Form.serialize(this.element);
+ }
+});
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.EventObserver = Class.create({
+ initialize: function(element, callback) {
+ this.element = DOKUid(element);
+ this.callback = callback;
+
+ this.lastValue = this.getValue();
+ if (this.element.tagName.toLowerCase() == 'form')
+ this.registerFormCallbacks();
+ else
+ this.registerCallback(this.element);
+ },
+
+ onElementEvent: function() {
+ var value = this.getValue();
+ if (this.lastValue != value) {
+ this.callback(this.element, value);
+ this.lastValue = value;
+ }
+ },
+
+ registerFormCallbacks: function() {
+ Form.getElements(this.element).each(this.registerCallback, this);
+ },
+
+ registerCallback: function(element) {
+ if (element.type) {
+ switch (element.type.toLowerCase()) {
+ case 'checkbox':
+ case 'radio':
+ Event.observe(element, 'click', this.onElementEvent.bind(this));
+ break;
+ default:
+ Event.observe(element, 'change', this.onElementEvent.bind(this));
+ break;
+ }
+ }
+ }
+});
+
+Form.Element.EventObserver = Class.create(Abstract.EventObserver, {
+ getValue: function() {
+ return Form.Element.getValue(this.element);
+ }
+});
+
+Form.EventObserver = Class.create(Abstract.EventObserver, {
+ getValue: function() {
+ return Form.serialize(this.element);
+ }
+});
+(function() {
+
+ var Event = {
+ KEY_BACKSPACE: 8,
+ KEY_TAB: 9,
+ KEY_RETURN: 13,
+ KEY_ESC: 27,
+ KEY_LEFT: 37,
+ KEY_UP: 38,
+ KEY_RIGHT: 39,
+ KEY_DOWN: 40,
+ KEY_DELETE: 46,
+ KEY_HOME: 36,
+ KEY_END: 35,
+ KEY_PAGEUP: 33,
+ KEY_PAGEDOWN: 34,
+ KEY_INSERT: 45,
+
+ cache: {}
+ };
+
+ var docEl = document.documentElement;
+ var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl
+ && 'onmouseleave' in docEl;
+
+ var _isButton;
+ if (Prototype.Browser.IE) {
+ var buttonMap = { 0: 1, 1: 4, 2: 2 };
+ _isButton = function(event, code) {
+ return event.button === buttonMap[code];
+ };
+ } else if (Prototype.Browser.WebKit) {
+ _isButton = function(event, code) {
+ switch (code) {
+ case 0: return event.which == 1 && !event.metaKey;
+ case 1: return event.which == 1 && event.metaKey;
+ default: return false;
+ }
+ };
+ } else {
+ _isButton = function(event, code) {
+ return event.which ? (event.which === code + 1) : (event.button === code);
+ };
+ }
+
+ function isLeftClick(event) { return _isButton(event, 0) }
+
+ function isMiddleClick(event) { return _isButton(event, 1) }
+
+ function isRightClick(event) { return _isButton(event, 2) }
+
+ function element(event) {
+ event = Event.extend(event);
+
+ var node = event.target, type = event.type,
+ currentTarget = event.currentTarget;
+
+ if (currentTarget && currentTarget.tagName) {
+ if (type === 'load' || type === 'error' ||
+ (type === 'click' && currentTarget.tagName.toLowerCase() === 'input'
+ && currentTarget.type === 'radio'))
+ node = currentTarget;
+ }
+
+ if (node.nodeType == Node.TEXT_NODE)
+ node = node.parentNode;
+
+ return Element.extend(node);
+ }
+
+ function findElement(event, expression) {
+ var element = Event.element(event);
+ if (!expression) return element;
+ var elements = [element].concat(element.ancestors());
+ return Selector.findElement(elements, expression, 0);
+ }
+
+ function pointer(event) {
+ return { x: pointerX(event), y: pointerY(event) };
+ }
+
+ function pointerX(event) {
+ var docElement = document.documentElement,
+ body = document.body || { scrollLeft: 0 };
+
+ return event.pageX || (event.clientX +
+ (docElement.scrollLeft || body.scrollLeft) -
+ (docElement.clientLeft || 0));
+ }
+
+ function pointerY(event) {
+ var docElement = document.documentElement,
+ body = document.body || { scrollTop: 0 };
+
+ return event.pageY || (event.clientY +
+ (docElement.scrollTop || body.scrollTop) -
+ (docElement.clientTop || 0));
+ }
+
+
+ function stop(event) {
+ Event.extend(event);
+ event.preventDefault();
+ event.stopPropagation();
+
+ event.stopped = true;
+ }
+
+ Event.Methods = {
+ isLeftClick: isLeftClick,
+ isMiddleClick: isMiddleClick,
+ isRightClick: isRightClick,
+
+ element: element,
+ findElement: findElement,
+
+ pointer: pointer,
+ pointerX: pointerX,
+ pointerY: pointerY,
+
+ stop: stop
+ };
+
+
+ var methods = Object.keys(Event.Methods).inject({ }, function(m, name) {
+ m[name] = Event.Methods[name].methodize();
+ return m;
+ });
+
+ if (Prototype.Browser.IE) {
+ function _relatedTarget(event) {
+ var element;
+ switch (event.type) {
+ case 'mouseover': element = event.fromElement; break;
+ case 'mouseout': element = event.toElement; break;
+ default: return null;
+ }
+ return Element.extend(element);
+ }
+
+ Object.extend(methods, {
+ stopPropagation: function() { this.cancelBubble = true },
+ preventDefault: function() { this.returnValue = false },
+ inspect: function() { return '[object Event]' }
+ });
+
+ Event.extend = function(event, element) {
+ if (!event) return false;
+ if (event._extendedByPrototype) return event;
+
+ event._extendedByPrototype = Prototype.emptyFunction;
+ var pointer = Event.pointer(event);
+
+ Object.extend(event, {
+ target: event.srcElement || element,
+ relatedTarget: _relatedTarget(event),
+ pageX: pointer.x,
+ pageY: pointer.y
+ });
+
+ return Object.extend(event, methods);
+ };
+ } else {
+ Event.prototype = window.Event.prototype || document.createEvent('HTMLEvents').__proto__;
+ Object.extend(Event.prototype, methods);
+ Event.extend = Prototype.K;
+ }
+
+ function _createResponder(element, eventName, handler) {
+ var registry = Element.retrieve(element, 'prototype_event_registry');
+
+ if (Object.isUndefined(registry)) {
+ CACHE.push(element);
+ registry = Element.retrieve(element, 'prototype_event_registry', $H());
+ }
+
+ var respondersForEvent = registry.get(eventName);
+ if (Object.isUndefined(respondersForEvent)) {
+ respondersForEvent = [];
+ registry.set(eventName, respondersForEvent);
+ }
+
+ if (respondersForEvent.pluck('handler').include(handler)) return false;
+
+ var responder;
+ if (eventName.include(":")) {
+ responder = function(event) {
+ if (Object.isUndefined(event.eventName))
+ return false;
+
+ if (event.eventName !== eventName)
+ return false;
+
+ Event.extend(event, element);
+ handler.call(element, event);
+ };
+ } else {
+ if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED &&
+ (eventName === "mouseenter" || eventName === "mouseleave")) {
+ if (eventName === "mouseenter" || eventName === "mouseleave") {
+ responder = function(event) {
+ Event.extend(event, element);
+
+ var parent = event.relatedTarget;
+ while (parent && parent !== element) {
+ try { parent = parent.parentNode; }
+ catch(e) { parent = element; }
+ }
+
+ if (parent === element) return;
+
+ handler.call(element, event);
+ };
+ }
+ } else {
+ responder = function(event) {
+ Event.extend(event, element);
+ handler.call(element, event);
+ };
+ }
+ }
+
+ responder.handler = handler;
+ respondersForEvent.push(responder);
+ return responder;
+ }
+
+ function _destroyCache() {
+ for (var i = 0, length = CACHE.length; i < length; i++) {
+ Event.stopObserving(CACHE[i]);
+ CACHE[i] = null;
+ }
+ }
+
+ var CACHE = [];
+
+ if (Prototype.Browser.IE)
+ window.attachEvent('onunload', _destroyCache);
+
+ if (Prototype.Browser.WebKit)
+ window.addEventListener('unload', Prototype.emptyFunction, false);
+
+
+ var _getDOMEventName = Prototype.K;
+
+ if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED) {
+ _getDOMEventName = function(eventName) {
+ var translations = { mouseenter: "mouseover", mouseleave: "mouseout" };
+ return eventName in translations ? translations[eventName] : eventName;
+ };
+ }
+
+ function observe(element, eventName, handler) {
+ element = DOKUid(element);
+
+ var responder = _createResponder(element, eventName, handler);
+
+ if (!responder) return element;
+
+ if (eventName.include(':')) {
+ if (element.addEventListener)
+ element.addEventListener("dataavailable", responder, false);
+ else {
+ element.attachEvent("ondataavailable", responder);
+ element.attachEvent("onfilterchange", responder);
+ }
+ } else {
+ var actualEventName = _getDOMEventName(eventName);
+
+ if (element.addEventListener)
+ element.addEventListener(actualEventName, responder, false);
+ else
+ element.attachEvent("on" + actualEventName, responder);
+ }
+
+ return element;
+ }
+
+ function stopObserving(element, eventName, handler) {
+ element = DOKUid(element);
+
+ var registry = Element.retrieve(element, 'prototype_event_registry');
+
+ if (Object.isUndefined(registry)) return element;
+
+ if (eventName && !handler) {
+ var responders = registry.get(eventName);
+
+ if (Object.isUndefined(responders)) return element;
+
+ responders.each( function(r) {
+ Element.stopObserving(element, eventName, r.handler);
+ });
+ return element;
+ } else if (!eventName) {
+ registry.each( function(pair) {
+ var eventName = pair.key, responders = pair.value;
+
+ responders.each( function(r) {
+ Element.stopObserving(element, eventName, r.handler);
+ });
+ });
+ return element;
+ }
+
+ var responders = registry.get(eventName);
+
+ if (!responders) return;
+
+ var responder = responders.find( function(r) { return r.handler === handler; });
+ if (!responder) return element;
+
+ var actualEventName = _getDOMEventName(eventName);
+
+ if (eventName.include(':')) {
+ if (element.removeEventListener)
+ element.removeEventListener("dataavailable", responder, false);
+ else {
+ element.detachEvent("ondataavailable", responder);
+ element.detachEvent("onfilterchange", responder);
+ }
+ } else {
+ if (element.removeEventListener)
+ element.removeEventListener(actualEventName, responder, false);
+ else
+ element.detachEvent('on' + actualEventName, responder);
+ }
+
+ registry.set(eventName, responders.without(responder));
+
+ return element;
+ }
+
+ function fire(element, eventName, memo, bubble) {
+ element = DOKUid(element);
+
+ if (Object.isUndefined(bubble))
+ bubble = true;
+
+ if (element == document && document.createEvent && !element.dispatchEvent)
+ element = document.documentElement;
+
+ var event;
+ if (document.createEvent) {
+ event = document.createEvent('HTMLEvents');
+ event.initEvent('dataavailable', true, true);
+ } else {
+ event = document.createEventObject();
+ event.eventType = bubble ? 'ondataavailable' : 'onfilterchange';
+ }
+
+ event.eventName = eventName;
+ event.memo = memo || { };
+
+ if (document.createEvent)
+ element.dispatchEvent(event);
+ else
+ element.fireEvent(event.eventType, event);
+
+ return Event.extend(event);
+ }
+
+
+ Object.extend(Event, Event.Methods);
+
+ Object.extend(Event, {
+ fire: fire,
+ observe: observe,
+ stopObserving: stopObserving
+ });
+
+ Element.addMethods({
+ fire: fire,
+
+ observe: observe,
+
+ stopObserving: stopObserving
+ });
+
+ Object.extend(document, {
+ fire: fire.methodize(),
+
+ observe: observe.methodize(),
+
+ stopObserving: stopObserving.methodize(),
+
+ loaded: false
+ });
+
+ if (window.Event) Object.extend(window.Event, Event);
+ else window.Event = Event;
+})();
+
+(function() {
+ /* Support for the DOMContentLoaded event is based on work by Dan Webb,
+ Matthias Miller, Dean Edwards, John Resig, and Diego Perini. */
+
+ var timer;
+
+ function fireContentLoadedEvent() {
+ if (document.loaded) return;
+ if (timer) window.clearTimeout(timer);
+ document.loaded = true;
+ document.fire('dom:loaded');
+ }
+
+ function checkReadyState() {
+ if (document.readyState === 'complete') {
+ document.stopObserving('readystatechange', checkReadyState);
+ fireContentLoadedEvent();
+ }
+ }
+
+ function pollDoScroll() {
+ try { document.documentElement.doScroll('left'); }
+ catch(e) {
+ timer = pollDoScroll.defer();
+ return;
+ }
+ fireContentLoadedEvent();
+ }
+
+ if (document.addEventListener) {
+ document.addEventListener('DOMContentLoaded', fireContentLoadedEvent, false);
+ } else {
+ document.observe('readystatechange', checkReadyState);
+ if (window == top)
+ timer = pollDoScroll.defer();
+ }
+
+ Event.observe(window, 'load', fireContentLoadedEvent);
+})();
+
+Element.addMethods();
+
+/*------------------------------- DEPRECATED -------------------------------*/
+
+Hash.toQueryString = Object.toQueryString;
+
+var Toggle = { display: Element.toggle };
+
+Element.Methods.childOf = Element.Methods.descendantOf;
+
+var Insertion = {
+ Before: function(element, content) {
+ return Element.insert(element, {before:content});
+ },
+
+ Top: function(element, content) {
+ return Element.insert(element, {top:content});
+ },
+
+ Bottom: function(element, content) {
+ return Element.insert(element, {bottom:content});
+ },
+
+ After: function(element, content) {
+ return Element.insert(element, {after:content});
+ }
+};
+
+var $continue = new Error('"throw $continue" is deprecated, use "return" instead');
+
+var Position = {
+ includeScrollOffsets: false,
+
+ prepare: function() {
+ this.deltaX = window.pageXOffset
+ || document.documentElement.scrollLeft
+ || document.body.scrollLeft
+ || 0;
+ this.deltaY = window.pageYOffset
+ || document.documentElement.scrollTop
+ || document.body.scrollTop
+ || 0;
+ },
+
+ within: function(element, x, y) {
+ if (this.includeScrollOffsets)
+ return this.withinIncludingScrolloffsets(element, x, y);
+ this.xcomp = x;
+ this.ycomp = y;
+ this.offset = Element.cumulativeOffset(element);
+
+ return (y >= this.offset[1] &&
+ y < this.offset[1] + element.offsetHeight &&
+ x >= this.offset[0] &&
+ x < this.offset[0] + element.offsetWidth);
+ },
+
+ withinIncludingScrolloffsets: function(element, x, y) {
+ var offsetcache = Element.cumulativeScrollOffset(element);
+
+ this.xcomp = x + offsetcache[0] - this.deltaX;
+ this.ycomp = y + offsetcache[1] - this.deltaY;
+ this.offset = Element.cumulativeOffset(element);
+
+ return (this.ycomp >= this.offset[1] &&
+ this.ycomp < this.offset[1] + element.offsetHeight &&
+ this.xcomp >= this.offset[0] &&
+ this.xcomp < this.offset[0] + element.offsetWidth);
+ },
+
+ overlap: function(mode, element) {
+ if (!mode) return 0;
+ if (mode == 'vertical')
+ return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
+ element.offsetHeight;
+ if (mode == 'horizontal')
+ return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
+ element.offsetWidth;
+ },
+
+
+ cumulativeOffset: Element.Methods.cumulativeOffset,
+
+ positionedOffset: Element.Methods.positionedOffset,
+
+ absolutize: function(element) {
+ Position.prepare();
+ return Element.absolutize(element);
+ },
+
+ relativize: function(element) {
+ Position.prepare();
+ return Element.relativize(element);
+ },
+
+ realOffset: Element.Methods.cumulativeScrollOffset,
+
+ offsetParent: Element.Methods.getOffsetParent,
+
+ page: Element.Methods.viewportOffset,
+
+ clone: function(source, target, options) {
+ options = options || { };
+ return Element.clonePosition(target, source, options);
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){
+ function iter(name) {
+ return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]";
+ }
+
+ instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ?
+ function(element, className) {
+ className = className.toString().strip();
+ var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className);
+ return cond ? document._getElementsByXPath('.//*' + cond, element) : [];
+ } : function(element, className) {
+ className = className.toString().strip();
+ var elements = [], classNames = (/\s/.test(className) ? $w(className) : null);
+ if (!classNames && !className) return elements;
+
+ var nodes = DOKUid(element).getElementsByTagName('*');
+ className = ' ' + className + ' ';
+
+ for (var i = 0, child, cn; child = nodes[i]; i++) {
+ if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) ||
+ (classNames && classNames.all(function(name) {
+ return !name.toString().blank() && cn.include(' ' + name + ' ');
+ }))))
+ elements.push(Element.extend(child));
+ }
+ return elements;
+ };
+
+ return function(className, parentElement) {
+ return DOKUid(parentElement || document.body).getElementsByClassName(className);
+ };
+}(Element.Methods);
+
+/*--------------------------------------------------------------------------*/
+
+Element.ClassNames = Class.create();
+Element.ClassNames.prototype = {
+ initialize: function(element) {
+ this.element = DOKUid(element);
+ },
+
+ _each: function(iterator) {
+ this.element.className.split(/\s+/).select(function(name) {
+ return name.length > 0;
+ })._each(iterator);
+ },
+
+ set: function(className) {
+ this.element.className = className;
+ },
+
+ add: function(classNameToAdd) {
+ if (this.include(classNameToAdd)) return;
+ this.set($A(this).concat(classNameToAdd).join(' '));
+ },
+
+ remove: function(classNameToRemove) {
+ if (!this.include(classNameToRemove)) return;
+ this.set($A(this).without(classNameToRemove).join(' '));
+ },
+
+ toString: function() {
+ return $A(this).join(' ');
+ }
+};
+
+Object.extend(Element.ClassNames.prototype, Enumerable);
+
+/*--------------------------------------------------------------------------*/ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/scriptaculous.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/scriptaculous.js
new file mode 100644
index 000000000..37a0733a5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/scriptaculous.js
@@ -0,0 +1,68 @@
+// script.aculo.us scriptaculous.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
+
+// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+var Scriptaculous = {
+ Version: '1.8.3',
+ require: function(libraryName) {
+ try{
+ // inserting via DOM fails in Safari 2.0, so brute force approach
+ document.write('<script type="text/javascript" src="'+libraryName+'"><\/script>');
+ } catch(e) {
+ // for xhtml+xml served content, fall back to DOM methods
+ var script = document.createElement('script');
+ script.type = 'text/javascript';
+ script.src = libraryName;
+ document.getElementsByTagName('head')[0].appendChild(script);
+ }
+ },
+ REQUIRED_PROTOTYPE: '1.6.0.3',
+ load: function() {
+ function convertVersionString(versionString) {
+ var v = versionString.replace(/_.*|\./g, '');
+ v = parseInt(v + '0'.times(4-v.length));
+ return versionString.indexOf('_') > -1 ? v-1 : v;
+ }
+
+ if((typeof Prototype=='undefined') ||
+ (typeof Element == 'undefined') ||
+ (typeof Element.Methods=='undefined') ||
+ (convertVersionString(Prototype.Version) <
+ convertVersionString(Scriptaculous.REQUIRED_PROTOTYPE)))
+ throw("script.aculo.us requires the Prototype JavaScript framework >= " +
+ Scriptaculous.REQUIRED_PROTOTYPE);
+
+ var js = /scriptaculous\.js(\?.*)?$/;
+ $$('head script[src]').findAll(function(s) {
+ return s.src.match(js);
+ }).each(function(s) {
+ var path = s.src.replace(js, ''),
+ includes = s.src.match(/\?.*load=([a-z,]*)/);
+ (includes ? includes[1] : 'builder,effects,dragdrop,controls,slider').split(',').each(
+ function(include) { Scriptaculous.require(path+include+'.js') });
+ });
+ }
+};
+
+Scriptaculous.load(); \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/slider.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/slider.js
new file mode 100644
index 000000000..ac2fef2d5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/slider.js
@@ -0,0 +1,275 @@
+// script.aculo.us slider.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
+
+// Copyright (c) 2005-2009 Marty Haught, Thomas Fuchs
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+if (!Control) var Control = { };
+
+// options:
+// axis: 'vertical', or 'horizontal' (default)
+//
+// callbacks:
+// onChange(value)
+// onSlide(value)
+Control.Slider = Class.create({
+ initialize: function(handle, track, options) {
+ var slider = this;
+
+ if (Object.isArray(handle)) {
+ this.handles = handle.collect( function(e) { return DOKUid(e) });
+ } else {
+ this.handles = [DOKUid(handle)];
+ }
+
+ this.track = DOKUid(track);
+ this.options = options || { };
+
+ this.axis = this.options.axis || 'horizontal';
+ this.increment = this.options.increment || 1;
+ this.step = parseInt(this.options.step || '1');
+ this.range = this.options.range || $R(0,1);
+
+ this.value = 0; // assure backwards compat
+ this.values = this.handles.map( function() { return 0 });
+ this.spans = this.options.spans ? this.options.spans.map(function(s){ return DOKUid(s) }) : false;
+ this.options.startSpan = DOKUid(this.options.startSpan || null);
+ this.options.endSpan = DOKUid(this.options.endSpan || null);
+
+ this.restricted = this.options.restricted || false;
+
+ this.maximum = this.options.maximum || this.range.end;
+ this.minimum = this.options.minimum || this.range.start;
+
+ // Will be used to align the handle onto the track, if necessary
+ this.alignX = parseInt(this.options.alignX || '0');
+ this.alignY = parseInt(this.options.alignY || '0');
+
+ this.trackLength = this.maximumOffset() - this.minimumOffset();
+
+ this.handleLength = this.isVertical() ?
+ (this.handles[0].offsetHeight != 0 ?
+ this.handles[0].offsetHeight : this.handles[0].style.height.replace(/px$/,"")) :
+ (this.handles[0].offsetWidth != 0 ? this.handles[0].offsetWidth :
+ this.handles[0].style.width.replace(/px$/,""));
+
+ this.active = false;
+ this.dragging = false;
+ this.disabled = false;
+
+ if (this.options.disabled) this.setDisabled();
+
+ // Allowed values array
+ this.allowedValues = this.options.values ? this.options.values.sortBy(Prototype.K) : false;
+ if (this.allowedValues) {
+ this.minimum = this.allowedValues.min();
+ this.maximum = this.allowedValues.max();
+ }
+
+ this.eventMouseDown = this.startDrag.bindAsEventListener(this);
+ this.eventMouseUp = this.endDrag.bindAsEventListener(this);
+ this.eventMouseMove = this.update.bindAsEventListener(this);
+
+ // Initialize handles in reverse (make sure first handle is active)
+ this.handles.each( function(h,i) {
+ i = slider.handles.length-1-i;
+ slider.setValue(parseFloat(
+ (Object.isArray(slider.options.sliderValue) ?
+ slider.options.sliderValue[i] : slider.options.sliderValue) ||
+ slider.range.start), i);
+ h.makePositioned().observe("mousedown", slider.eventMouseDown);
+ });
+
+ this.track.observe("mousedown", this.eventMouseDown);
+ document.observe("mouseup", this.eventMouseUp);
+ document.observe("mousemove", this.eventMouseMove);
+
+ this.initialized = true;
+ },
+ dispose: function() {
+ var slider = this;
+ Event.stopObserving(this.track, "mousedown", this.eventMouseDown);
+ Event.stopObserving(document, "mouseup", this.eventMouseUp);
+ Event.stopObserving(document, "mousemove", this.eventMouseMove);
+ this.handles.each( function(h) {
+ Event.stopObserving(h, "mousedown", slider.eventMouseDown);
+ });
+ },
+ setDisabled: function(){
+ this.disabled = true;
+ },
+ setEnabled: function(){
+ this.disabled = false;
+ },
+ getNearestValue: function(value){
+ if (this.allowedValues){
+ if (value >= this.allowedValues.max()) return(this.allowedValues.max());
+ if (value <= this.allowedValues.min()) return(this.allowedValues.min());
+
+ var offset = Math.abs(this.allowedValues[0] - value);
+ var newValue = this.allowedValues[0];
+ this.allowedValues.each( function(v) {
+ var currentOffset = Math.abs(v - value);
+ if (currentOffset <= offset){
+ newValue = v;
+ offset = currentOffset;
+ }
+ });
+ return newValue;
+ }
+ if (value > this.range.end) return this.range.end;
+ if (value < this.range.start) return this.range.start;
+ return value;
+ },
+ setValue: function(sliderValue, handleIdx){
+ if (!this.active) {
+ this.activeHandleIdx = handleIdx || 0;
+ this.activeHandle = this.handles[this.activeHandleIdx];
+ this.updateStyles();
+ }
+ handleIdx = handleIdx || this.activeHandleIdx || 0;
+ if (this.initialized && this.restricted) {
+ if ((handleIdx>0) && (sliderValue<this.values[handleIdx-1]))
+ sliderValue = this.values[handleIdx-1];
+ if ((handleIdx < (this.handles.length-1)) && (sliderValue>this.values[handleIdx+1]))
+ sliderValue = this.values[handleIdx+1];
+ }
+ sliderValue = this.getNearestValue(sliderValue);
+ this.values[handleIdx] = sliderValue;
+ this.value = this.values[0]; // assure backwards compat
+
+ this.handles[handleIdx].style[this.isVertical() ? 'top' : 'left'] =
+ this.translateToPx(sliderValue);
+
+ this.drawSpans();
+ if (!this.dragging || !this.event) this.updateFinished();
+ },
+ setValueBy: function(delta, handleIdx) {
+ this.setValue(this.values[handleIdx || this.activeHandleIdx || 0] + delta,
+ handleIdx || this.activeHandleIdx || 0);
+ },
+ translateToPx: function(value) {
+ return Math.round(
+ ((this.trackLength-this.handleLength)/(this.range.end-this.range.start)) *
+ (value - this.range.start)) + "px";
+ },
+ translateToValue: function(offset) {
+ return ((offset/(this.trackLength-this.handleLength) *
+ (this.range.end-this.range.start)) + this.range.start);
+ },
+ getRange: function(range) {
+ var v = this.values.sortBy(Prototype.K);
+ range = range || 0;
+ return $R(v[range],v[range+1]);
+ },
+ minimumOffset: function(){
+ return(this.isVertical() ? this.alignY : this.alignX);
+ },
+ maximumOffset: function(){
+ return(this.isVertical() ?
+ (this.track.offsetHeight != 0 ? this.track.offsetHeight :
+ this.track.style.height.replace(/px$/,"")) - this.alignY :
+ (this.track.offsetWidth != 0 ? this.track.offsetWidth :
+ this.track.style.width.replace(/px$/,"")) - this.alignX);
+ },
+ isVertical: function(){
+ return (this.axis == 'vertical');
+ },
+ drawSpans: function() {
+ var slider = this;
+ if (this.spans)
+ $R(0, this.spans.length-1).each(function(r) { slider.setSpan(slider.spans[r], slider.getRange(r)) });
+ if (this.options.startSpan)
+ this.setSpan(this.options.startSpan,
+ $R(0, this.values.length>1 ? this.getRange(0).min() : this.value ));
+ if (this.options.endSpan)
+ this.setSpan(this.options.endSpan,
+ $R(this.values.length>1 ? this.getRange(this.spans.length-1).max() : this.value, this.maximum));
+ },
+ setSpan: function(span, range) {
+ if (this.isVertical()) {
+ span.style.top = this.translateToPx(range.start);
+ span.style.height = this.translateToPx(range.end - range.start + this.range.start);
+ } else {
+ span.style.left = this.translateToPx(range.start);
+ span.style.width = this.translateToPx(range.end - range.start + this.range.start);
+ }
+ },
+ updateStyles: function() {
+ this.handles.each( function(h){ Element.removeClassName(h, 'selected') });
+ Element.addClassName(this.activeHandle, 'selected');
+ },
+ startDrag: function(event) {
+ if (Event.isLeftClick(event)) {
+ if (!this.disabled){
+ this.active = true;
+
+ var handle = Event.element(event);
+ var pointer = [Event.pointerX(event), Event.pointerY(event)];
+ var track = handle;
+ if (track==this.track) {
+ var offsets = this.track.cumulativeOffset();
+ this.event = event;
+ this.setValue(this.translateToValue(
+ (this.isVertical() ? pointer[1]-offsets[1] : pointer[0]-offsets[0])-(this.handleLength/2)
+ ));
+ var offsets = this.activeHandle.cumulativeOffset();
+ this.offsetX = (pointer[0] - offsets[0]);
+ this.offsetY = (pointer[1] - offsets[1]);
+ } else {
+ // find the handle (prevents issues with Safari)
+ while((this.handles.indexOf(handle) == -1) && handle.parentNode)
+ handle = handle.parentNode;
+
+ if (this.handles.indexOf(handle)!=-1) {
+ this.activeHandle = handle;
+ this.activeHandleIdx = this.handles.indexOf(this.activeHandle);
+ this.updateStyles();
+
+ var offsets = this.activeHandle.cumulativeOffset();
+ this.offsetX = (pointer[0] - offsets[0]);
+ this.offsetY = (pointer[1] - offsets[1]);
+ }
+ }
+ }
+ Event.stop(event);
+ }
+ },
+ update: function(event) {
+ if (this.active) {
+ if (!this.dragging) this.dragging = true;
+ this.draw(event);
+ if (Prototype.Browser.WebKit) window.scrollBy(0,0);
+ Event.stop(event);
+ }
+ },
+ draw: function(event) {
+ var pointer = [Event.pointerX(event), Event.pointerY(event)];
+ var offsets = this.track.cumulativeOffset();
+ pointer[0] -= this.offsetX + offsets[0];
+ pointer[1] -= this.offsetY + offsets[1];
+ this.event = event;
+ this.setValue(this.translateToValue( this.isVertical() ? pointer[1] : pointer[0] ));
+ if (this.initialized && this.options.onSlide)
+ this.options.onSlide(this.values.length>1 ? this.values : this.value, this);
+ },
+ endDrag: function(event) {
+ if (this.active && this.dragging) {
+ this.finishDrag(event, true);
+ Event.stop(event);
+ }
+ this.active = false;
+ this.dragging = false;
+ },
+ finishDrag: function(event, success) {
+ this.active = false;
+ this.dragging = false;
+ this.updateFinished();
+ },
+ updateFinished: function() {
+ if (this.initialized && this.options.onChange)
+ this.options.onChange(this.values.length>1 ? this.values : this.value, this);
+ this.event = null;
+ }
+}); \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/sound.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/sound.js
new file mode 100644
index 000000000..edacf4101
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/sound.js
@@ -0,0 +1,59 @@
+// script.aculo.us sound.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
+
+// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+//
+// Based on code created by Jules Gravinese (http://www.webveteran.com/)
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+Sound = {
+ tracks: {},
+ _enabled: true,
+ template:
+ new Template('<embed style="height:0" id="sound_#{track}_#{id}" src="#{url}" loop="false" autostart="true" hidden="true"/>'),
+ enable: function(){
+ Sound._enabled = true;
+ },
+ disable: function(){
+ Sound._enabled = false;
+ },
+ play: function(url){
+ if(!Sound._enabled) return;
+ var options = Object.extend({
+ track: 'global', url: url, replace: false
+ }, arguments[1] || {});
+
+ if(options.replace && this.tracks[options.track]) {
+ $R(0, this.tracks[options.track].id).each(function(id){
+ var sound = DOKUid('sound_'+options.track+'_'+id);
+ sound.Stop && sound.Stop();
+ sound.remove();
+ });
+ this.tracks[options.track] = null;
+ }
+
+ if(!this.tracks[options.track])
+ this.tracks[options.track] = { id: 0 };
+ else
+ this.tracks[options.track].id++;
+
+ options.id = this.tracks[options.track].id;
+ $$('body')[0].insert(
+ Prototype.Browser.IE ? new Element('bgsound',{
+ id: 'sound_'+options.track+'_'+options.id,
+ src: options.url, loop: 1, autostart: true
+ }) : Sound.template.evaluate(options));
+ }
+};
+
+if(Prototype.Browser.Gecko && navigator.userAgent.indexOf("Win") > 0){
+ if(navigator.plugins && $A(navigator.plugins).detect(function(p){ return p.name.indexOf('QuickTime') != -1 }))
+ Sound.template = new Template('<object id="sound_#{track}_#{id}" width="0" height="0" type="audio/mpeg" data="#{url}"/>');
+ else if(navigator.plugins && $A(navigator.plugins).detect(function(p){ return p.name.indexOf('Windows Media') != -1 }))
+ Sound.template = new Template('<object id="sound_#{track}_#{id}" type="application/x-mplayer2" data="#{url}"></object>');
+ else if(navigator.plugins && $A(navigator.plugins).detect(function(p){ return p.name.indexOf('RealPlayer') != -1 }))
+ Sound.template = new Template('<embed type="audio/x-pn-realaudio-plugin" style="height:0" id="sound_#{track}_#{id}" src="#{url}" loop="false" autostart="true" hidden="true"/>');
+ else
+ Sound.play = function(){};
+} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/unittest.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/unittest.js
new file mode 100644
index 000000000..90e97b8d6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/unittest.js
@@ -0,0 +1,568 @@
+// script.aculo.us unittest.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
+
+// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+// (c) 2005-2009 Jon Tirsen (http://www.tirsen.com)
+// (c) 2005-2009 Michael Schuerig (http://www.schuerig.de/michael/)
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+// experimental, Firefox-only
+Event.simulateMouse = function(element, eventName) {
+ var options = Object.extend({
+ pointerX: 0,
+ pointerY: 0,
+ buttons: 0,
+ ctrlKey: false,
+ altKey: false,
+ shiftKey: false,
+ metaKey: false
+ }, arguments[2] || {});
+ var oEvent = document.createEvent("MouseEvents");
+ oEvent.initMouseEvent(eventName, true, true, document.defaultView,
+ options.buttons, options.pointerX, options.pointerY, options.pointerX, options.pointerY,
+ options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, 0, DOKUid(element));
+
+ if(this.mark) Element.remove(this.mark);
+ this.mark = document.createElement('div');
+ this.mark.appendChild(document.createTextNode(" "));
+ document.body.appendChild(this.mark);
+ this.mark.style.position = 'absolute';
+ this.mark.style.top = options.pointerY + "px";
+ this.mark.style.left = options.pointerX + "px";
+ this.mark.style.width = "5px";
+ this.mark.style.height = "5px;";
+ this.mark.style.borderTop = "1px solid red;";
+ this.mark.style.borderLeft = "1px solid red;";
+
+ if(this.step)
+ alert('['+new Date().getTime().toString()+'] '+eventName+'/'+Test.Unit.inspect(options));
+
+ DOKUid(element).dispatchEvent(oEvent);
+};
+
+// Note: Due to a fix in Firefox 1.0.5/6 that probably fixed "too much", this doesn't work in 1.0.6 or DP2.
+// You need to downgrade to 1.0.4 for now to get this working
+// See https://bugzilla.mozilla.org/show_bug.cgi?id=289940 for the fix that fixed too much
+Event.simulateKey = function(element, eventName) {
+ var options = Object.extend({
+ ctrlKey: false,
+ altKey: false,
+ shiftKey: false,
+ metaKey: false,
+ keyCode: 0,
+ charCode: 0
+ }, arguments[2] || {});
+
+ var oEvent = document.createEvent("KeyEvents");
+ oEvent.initKeyEvent(eventName, true, true, window,
+ options.ctrlKey, options.altKey, options.shiftKey, options.metaKey,
+ options.keyCode, options.charCode );
+ DOKUid(element).dispatchEvent(oEvent);
+};
+
+Event.simulateKeys = function(element, command) {
+ for(var i=0; i<command.length; i++) {
+ Event.simulateKey(element,'keypress',{charCode:command.charCodeAt(i)});
+ }
+};
+
+var Test = {};
+Test.Unit = {};
+
+// security exception workaround
+Test.Unit.inspect = Object.inspect;
+
+Test.Unit.Logger = Class.create();
+Test.Unit.Logger.prototype = {
+ initialize: function(log) {
+ this.log = DOKUid(log);
+ if (this.log) {
+ this._createLogTable();
+ }
+ },
+ start: function(testName) {
+ if (!this.log) return;
+ this.testName = testName;
+ this.lastLogLine = document.createElement('tr');
+ this.statusCell = document.createElement('td');
+ this.nameCell = document.createElement('td');
+ this.nameCell.className = "nameCell";
+ this.nameCell.appendChild(document.createTextNode(testName));
+ this.messageCell = document.createElement('td');
+ this.lastLogLine.appendChild(this.statusCell);
+ this.lastLogLine.appendChild(this.nameCell);
+ this.lastLogLine.appendChild(this.messageCell);
+ this.loglines.appendChild(this.lastLogLine);
+ },
+ finish: function(status, summary) {
+ if (!this.log) return;
+ this.lastLogLine.className = status;
+ this.statusCell.innerHTML = status;
+ this.messageCell.innerHTML = this._toHTML(summary);
+ this.addLinksToResults();
+ },
+ message: function(message) {
+ if (!this.log) return;
+ this.messageCell.innerHTML = this._toHTML(message);
+ },
+ summary: function(summary) {
+ if (!this.log) return;
+ this.logsummary.innerHTML = this._toHTML(summary);
+ },
+ _createLogTable: function() {
+ this.log.innerHTML =
+ '<div id="logsummary"></div>' +
+ '<table id="logtable">' +
+ '<thead><tr><th>Status</th><th>Test</th><th>Message</th></tr></thead>' +
+ '<tbody id="loglines"></tbody>' +
+ '</table>';
+ this.logsummary = DOKUid('logsummary');
+ this.loglines = DOKUid('loglines');
+ },
+ _toHTML: function(txt) {
+ return txt.escapeHTML().replace(/\n/g,"<br/>");
+ },
+ addLinksToResults: function(){
+ $$("tr.failed .nameCell").each( function(td){ // todo: limit to children of this.log
+ td.title = "Run only this test";
+ Event.observe(td, 'click', function(){ window.location.search = "?tests=" + td.innerHTML;});
+ });
+ $$("tr.passed .nameCell").each( function(td){ // todo: limit to children of this.log
+ td.title = "Run all tests";
+ Event.observe(td, 'click', function(){ window.location.search = "";});
+ });
+ }
+};
+
+Test.Unit.Runner = Class.create();
+Test.Unit.Runner.prototype = {
+ initialize: function(testcases) {
+ this.options = Object.extend({
+ testLog: 'testlog'
+ }, arguments[1] || {});
+ this.options.resultsURL = this.parseResultsURLQueryParameter();
+ this.options.tests = this.parseTestsQueryParameter();
+ if (this.options.testLog) {
+ this.options.testLog = DOKUid(this.options.testLog) || null;
+ }
+ if(this.options.tests) {
+ this.tests = [];
+ for(var i = 0; i < this.options.tests.length; i++) {
+ if(/^test/.test(this.options.tests[i])) {
+ this.tests.push(new Test.Unit.Testcase(this.options.tests[i], testcases[this.options.tests[i]], testcases["setup"], testcases["teardown"]));
+ }
+ }
+ } else {
+ if (this.options.test) {
+ this.tests = [new Test.Unit.Testcase(this.options.test, testcases[this.options.test], testcases["setup"], testcases["teardown"])];
+ } else {
+ this.tests = [];
+ for(var testcase in testcases) {
+ if(/^test/.test(testcase)) {
+ this.tests.push(
+ new Test.Unit.Testcase(
+ this.options.context ? ' -> ' + this.options.titles[testcase] : testcase,
+ testcases[testcase], testcases["setup"], testcases["teardown"]
+ ));
+ }
+ }
+ }
+ }
+ this.currentTest = 0;
+ this.logger = new Test.Unit.Logger(this.options.testLog);
+ setTimeout(this.runTests.bind(this), 1000);
+ },
+ parseResultsURLQueryParameter: function() {
+ return window.location.search.parseQuery()["resultsURL"];
+ },
+ parseTestsQueryParameter: function(){
+ if (window.location.search.parseQuery()["tests"]){
+ return window.location.search.parseQuery()["tests"].split(',');
+ };
+ },
+ // Returns:
+ // "ERROR" if there was an error,
+ // "FAILURE" if there was a failure, or
+ // "SUCCESS" if there was neither
+ getResult: function() {
+ var hasFailure = false;
+ for(var i=0;i<this.tests.length;i++) {
+ if (this.tests[i].errors > 0) {
+ return "ERROR";
+ }
+ if (this.tests[i].failures > 0) {
+ hasFailure = true;
+ }
+ }
+ if (hasFailure) {
+ return "FAILURE";
+ } else {
+ return "SUCCESS";
+ }
+ },
+ postResults: function() {
+ if (this.options.resultsURL) {
+ new Ajax.Request(this.options.resultsURL,
+ { method: 'get', parameters: 'result=' + this.getResult(), asynchronous: false });
+ }
+ },
+ runTests: function() {
+ var test = this.tests[this.currentTest];
+ if (!test) {
+ // finished!
+ this.postResults();
+ this.logger.summary(this.summary());
+ return;
+ }
+ if(!test.isWaiting) {
+ this.logger.start(test.name);
+ }
+ test.run();
+ if(test.isWaiting) {
+ this.logger.message("Waiting for " + test.timeToWait + "ms");
+ setTimeout(this.runTests.bind(this), test.timeToWait || 1000);
+ } else {
+ this.logger.finish(test.status(), test.summary());
+ this.currentTest++;
+ // tail recursive, hopefully the browser will skip the stackframe
+ this.runTests();
+ }
+ },
+ summary: function() {
+ var assertions = 0;
+ var failures = 0;
+ var errors = 0;
+ var messages = [];
+ for(var i=0;i<this.tests.length;i++) {
+ assertions += this.tests[i].assertions;
+ failures += this.tests[i].failures;
+ errors += this.tests[i].errors;
+ }
+ return (
+ (this.options.context ? this.options.context + ': ': '') +
+ this.tests.length + " tests, " +
+ assertions + " assertions, " +
+ failures + " failures, " +
+ errors + " errors");
+ }
+};
+
+Test.Unit.Assertions = Class.create();
+Test.Unit.Assertions.prototype = {
+ initialize: function() {
+ this.assertions = 0;
+ this.failures = 0;
+ this.errors = 0;
+ this.messages = [];
+ },
+ summary: function() {
+ return (
+ this.assertions + " assertions, " +
+ this.failures + " failures, " +
+ this.errors + " errors" + "\n" +
+ this.messages.join("\n"));
+ },
+ pass: function() {
+ this.assertions++;
+ },
+ fail: function(message) {
+ this.failures++;
+ this.messages.push("Failure: " + message);
+ },
+ info: function(message) {
+ this.messages.push("Info: " + message);
+ },
+ error: function(error) {
+ this.errors++;
+ this.messages.push(error.name + ": "+ error.message + "(" + Test.Unit.inspect(error) +")");
+ },
+ status: function() {
+ if (this.failures > 0) return 'failed';
+ if (this.errors > 0) return 'error';
+ return 'passed';
+ },
+ assert: function(expression) {
+ var message = arguments[1] || 'assert: got "' + Test.Unit.inspect(expression) + '"';
+ try { expression ? this.pass() :
+ this.fail(message); }
+ catch(e) { this.error(e); }
+ },
+ assertEqual: function(expected, actual) {
+ var message = arguments[2] || "assertEqual";
+ try { (expected == actual) ? this.pass() :
+ this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
+ '", actual "' + Test.Unit.inspect(actual) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertInspect: function(expected, actual) {
+ var message = arguments[2] || "assertInspect";
+ try { (expected == actual.inspect()) ? this.pass() :
+ this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
+ '", actual "' + Test.Unit.inspect(actual) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertEnumEqual: function(expected, actual) {
+ var message = arguments[2] || "assertEnumEqual";
+ try { $A(expected).length == $A(actual).length &&
+ expected.zip(actual).all(function(pair) { return pair[0] == pair[1] }) ?
+ this.pass() : this.fail(message + ': expected ' + Test.Unit.inspect(expected) +
+ ', actual ' + Test.Unit.inspect(actual)); }
+ catch(e) { this.error(e); }
+ },
+ assertNotEqual: function(expected, actual) {
+ var message = arguments[2] || "assertNotEqual";
+ try { (expected != actual) ? this.pass() :
+ this.fail(message + ': got "' + Test.Unit.inspect(actual) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertIdentical: function(expected, actual) {
+ var message = arguments[2] || "assertIdentical";
+ try { (expected === actual) ? this.pass() :
+ this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
+ '", actual "' + Test.Unit.inspect(actual) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertNotIdentical: function(expected, actual) {
+ var message = arguments[2] || "assertNotIdentical";
+ try { !(expected === actual) ? this.pass() :
+ this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
+ '", actual "' + Test.Unit.inspect(actual) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertNull: function(obj) {
+ var message = arguments[1] || 'assertNull';
+ try { (obj==null) ? this.pass() :
+ this.fail(message + ': got "' + Test.Unit.inspect(obj) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertMatch: function(expected, actual) {
+ var message = arguments[2] || 'assertMatch';
+ var regex = new RegExp(expected);
+ try { (regex.exec(actual)) ? this.pass() :
+ this.fail(message + ' : regex: "' + Test.Unit.inspect(expected) + ' did not match: ' + Test.Unit.inspect(actual) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertHidden: function(element) {
+ var message = arguments[1] || 'assertHidden';
+ this.assertEqual("none", element.style.display, message);
+ },
+ assertNotNull: function(object) {
+ var message = arguments[1] || 'assertNotNull';
+ this.assert(object != null, message);
+ },
+ assertType: function(expected, actual) {
+ var message = arguments[2] || 'assertType';
+ try {
+ (actual.constructor == expected) ? this.pass() :
+ this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
+ '", actual "' + (actual.constructor) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertNotOfType: function(expected, actual) {
+ var message = arguments[2] || 'assertNotOfType';
+ try {
+ (actual.constructor != expected) ? this.pass() :
+ this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
+ '", actual "' + (actual.constructor) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertInstanceOf: function(expected, actual) {
+ var message = arguments[2] || 'assertInstanceOf';
+ try {
+ (actual instanceof expected) ? this.pass() :
+ this.fail(message + ": object was not an instance of the expected type"); }
+ catch(e) { this.error(e); }
+ },
+ assertNotInstanceOf: function(expected, actual) {
+ var message = arguments[2] || 'assertNotInstanceOf';
+ try {
+ !(actual instanceof expected) ? this.pass() :
+ this.fail(message + ": object was an instance of the not expected type"); }
+ catch(e) { this.error(e); }
+ },
+ assertRespondsTo: function(method, obj) {
+ var message = arguments[2] || 'assertRespondsTo';
+ try {
+ (obj[method] && typeof obj[method] == 'function') ? this.pass() :
+ this.fail(message + ": object doesn't respond to [" + method + "]"); }
+ catch(e) { this.error(e); }
+ },
+ assertReturnsTrue: function(method, obj) {
+ var message = arguments[2] || 'assertReturnsTrue';
+ try {
+ var m = obj[method];
+ if(!m) m = obj['is'+method.charAt(0).toUpperCase()+method.slice(1)];
+ m() ? this.pass() :
+ this.fail(message + ": method returned false"); }
+ catch(e) { this.error(e); }
+ },
+ assertReturnsFalse: function(method, obj) {
+ var message = arguments[2] || 'assertReturnsFalse';
+ try {
+ var m = obj[method];
+ if(!m) m = obj['is'+method.charAt(0).toUpperCase()+method.slice(1)];
+ !m() ? this.pass() :
+ this.fail(message + ": method returned true"); }
+ catch(e) { this.error(e); }
+ },
+ assertRaise: function(exceptionName, method) {
+ var message = arguments[2] || 'assertRaise';
+ try {
+ method();
+ this.fail(message + ": exception expected but none was raised"); }
+ catch(e) {
+ ((exceptionName == null) || (e.name==exceptionName)) ? this.pass() : this.error(e);
+ }
+ },
+ assertElementsMatch: function() {
+ var expressions = $A(arguments), elements = $A(expressions.shift());
+ if (elements.length != expressions.length) {
+ this.fail('assertElementsMatch: size mismatch: ' + elements.length + ' elements, ' + expressions.length + ' expressions');
+ return false;
+ }
+ elements.zip(expressions).all(function(pair, index) {
+ var element = DOKUid(pair.first()), expression = pair.last();
+ if (element.match(expression)) return true;
+ this.fail('assertElementsMatch: (in index ' + index + ') expected ' + expression.inspect() + ' but got ' + element.inspect());
+ }.bind(this)) && this.pass();
+ },
+ assertElementMatches: function(element, expression) {
+ this.assertElementsMatch([element], expression);
+ },
+ benchmark: function(operation, iterations) {
+ var startAt = new Date();
+ (iterations || 1).times(operation);
+ var timeTaken = ((new Date())-startAt);
+ this.info((arguments[2] || 'Operation') + ' finished ' +
+ iterations + ' iterations in ' + (timeTaken/1000)+'s' );
+ return timeTaken;
+ },
+ _isVisible: function(element) {
+ element = DOKUid(element);
+ if(!element.parentNode) return true;
+ this.assertNotNull(element);
+ if(element.style && Element.getStyle(element, 'display') == 'none')
+ return false;
+
+ return this._isVisible(element.parentNode);
+ },
+ assertNotVisible: function(element) {
+ this.assert(!this._isVisible(element), Test.Unit.inspect(element) + " was not hidden and didn't have a hidden parent either. " + ("" || arguments[1]));
+ },
+ assertVisible: function(element) {
+ this.assert(this._isVisible(element), Test.Unit.inspect(element) + " was not visible. " + ("" || arguments[1]));
+ },
+ benchmark: function(operation, iterations) {
+ var startAt = new Date();
+ (iterations || 1).times(operation);
+ var timeTaken = ((new Date())-startAt);
+ this.info((arguments[2] || 'Operation') + ' finished ' +
+ iterations + ' iterations in ' + (timeTaken/1000)+'s' );
+ return timeTaken;
+ }
+};
+
+Test.Unit.Testcase = Class.create();
+Object.extend(Object.extend(Test.Unit.Testcase.prototype, Test.Unit.Assertions.prototype), {
+ initialize: function(name, test, setup, teardown) {
+ Test.Unit.Assertions.prototype.initialize.bind(this)();
+ this.name = name;
+
+ if(typeof test == 'string') {
+ test = test.gsub(/(\.should[^\(]+\()/,'#{0}this,');
+ test = test.gsub(/(\.should[^\(]+)\(this,\)/,'#{1}(this)');
+ this.test = function() {
+ eval('with(this){'+test+'}');
+ }
+ } else {
+ this.test = test || function() {};
+ }
+
+ this.setup = setup || function() {};
+ this.teardown = teardown || function() {};
+ this.isWaiting = false;
+ this.timeToWait = 1000;
+ },
+ wait: function(time, nextPart) {
+ this.isWaiting = true;
+ this.test = nextPart;
+ this.timeToWait = time;
+ },
+ run: function() {
+ try {
+ try {
+ if (!this.isWaiting) this.setup.bind(this)();
+ this.isWaiting = false;
+ this.test.bind(this)();
+ } finally {
+ if(!this.isWaiting) {
+ this.teardown.bind(this)();
+ }
+ }
+ }
+ catch(e) { this.error(e); }
+ }
+});
+
+// *EXPERIMENTAL* BDD-style testing to please non-technical folk
+// This draws many ideas from RSpec http://rspec.rubyforge.org/
+
+Test.setupBDDExtensionMethods = function(){
+ var METHODMAP = {
+ shouldEqual: 'assertEqual',
+ shouldNotEqual: 'assertNotEqual',
+ shouldEqualEnum: 'assertEnumEqual',
+ shouldBeA: 'assertType',
+ shouldNotBeA: 'assertNotOfType',
+ shouldBeAn: 'assertType',
+ shouldNotBeAn: 'assertNotOfType',
+ shouldBeNull: 'assertNull',
+ shouldNotBeNull: 'assertNotNull',
+
+ shouldBe: 'assertReturnsTrue',
+ shouldNotBe: 'assertReturnsFalse',
+ shouldRespondTo: 'assertRespondsTo'
+ };
+ var makeAssertion = function(assertion, args, object) {
+ this[assertion].apply(this,(args || []).concat([object]));
+ };
+
+ Test.BDDMethods = {};
+ $H(METHODMAP).each(function(pair) {
+ Test.BDDMethods[pair.key] = function() {
+ var args = $A(arguments);
+ var scope = args.shift();
+ makeAssertion.apply(scope, [pair.value, args, this]); };
+ });
+
+ [Array.prototype, String.prototype, Number.prototype, Boolean.prototype].each(
+ function(p){ Object.extend(p, Test.BDDMethods) }
+ );
+};
+
+Test.context = function(name, spec, log){
+ Test.setupBDDExtensionMethods();
+
+ var compiledSpec = {};
+ var titles = {};
+ for(specName in spec) {
+ switch(specName){
+ case "setup":
+ case "teardown":
+ compiledSpec[specName] = spec[specName];
+ break;
+ default:
+ var testName = 'test'+specName.gsub(/\s+/,'-').camelize();
+ var body = spec[specName].toString().split('\n').slice(1);
+ if(/^\{/.test(body[0])) body = body.slice(1);
+ body.pop();
+ body = body.map(function(statement){
+ return statement.strip()
+ });
+ compiledSpec[testName] = body.join('\n');
+ titles[testName] = specName;
+ }
+ }
+ new Test.Unit.Runner(compiledSpec, { titles: titles, testLog: log || 'testlog', context: name });
+}; \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/LEEME.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/LEEME.txt
new file mode 100755
index 000000000..5c00e8abd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/LEEME.txt
@@ -0,0 +1,31 @@
+EXECUTIVE
+
+Tema para S5, creado originalmente por jEsuSdA 8)
+http://www.jesusda.com
+
+Más temas en: http://www.jesusda.com/projects/presentaciones_s5
+
+
+
+Para customizar este tema modifica el archivo CSS:
+
+s5-ultraviolet/ui/default/pretty.css
+
+
+
+Los archivos gráficos referentes al tema están en la carpeta:
+
+/ui/default/pics
+
+
+Puedes personalizar el favicon copiando el tuyo en la carpeta:
+
+/ui/default/pics
+
+con el nombre favicon.ico
+
+
+
+Para cualquier sugerencia e idea, por favor, contacta conmigo a través de mi web. ;)
+
+--jEsuSdA 8) \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/blank.gif
new file mode 100755
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/iepngfix.htc
new file mode 100755
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/index.html
new file mode 100755
index 000000000..39d8f46ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/index.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es-es" >
+
+
+<head>
+
+ <title>[Título de la presentación aquí]</title>
+ <!-- metadata -->
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta http-equiv="content-language" content="es" />
+
+ <!--titulo y datos de publicación de la presentación-->
+
+ <meta name="description" content="[Título de la presentación aquí]" />
+
+ <meta name="keywords" content="[keywords aquí]" />
+ <meta name="presdate" content="[Aquí la fecha de publicación en formato aaaammdd]" />
+
+ <meta name="author" lang="es" content="[Nombre del autor de la presentación aquí]" />
+ <meta name="company" content="[Organización del autor de la presentación aquí]" />
+
+ <link rel="shortcut icon" href="ui/default/pics/favicon.ico" />
+
+ <meta name="generator" content="S5" />
+ <meta name="progid" content="quanta+" />
+ <meta name="version" content="S5 · jEsuSdA · 1.1" />
+ <!--Versión adaptada del estandard S5 1.1 por jEsuSdA-->
+
+ <meta name="robots" content="all" />
+
+ <!-- configuration parameters -->
+ <meta name="defaultView" content="slideshow" />
+ <meta name="controlVis" content="hidden" />
+
+ <!-- style sheet links -->
+ <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
+ <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
+ <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
+ <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
+
+ <!-- S5 JS -->
+ <script src="ui/default/slides.js" type="text/javascript"></script>
+
+</head>
+
+<body>
+
+ <div class="layout">
+ <div id="controls"><!-- NO EDITAR --></div>
+ <div id="currentSlide"><!-- NO EDITAR --></div>
+
+ <div id="header">
+ <div id="logo"><!-- NO EDITAR --></div>
+ </div>
+
+ </div>
+
+ <div id="footer">
+ <h1>[Lugar/Fecha de la presentación aquí]</h1>
+ <h2>[Título de la presentación aquí]</h2>
+ </div>
+
+
+
+
+<div class="presentation">
+
+ <div class="slide">
+ <h1>[Título de la presentación aquí]</h1>
+ <h3>[Nombre del ponente aquí]</h3>
+ <h4>[Datos extra aquí]</h4>
+ </div>
+
+
+ <div class="slide">
+ <h1>[Título de la diapositiva]</h1>
+
+ <ul>
+ <li>[Punto uno]</li>
+ <li>[Punto dos]</li>
+ <li>[Punto tres]</li>
+ <li>[Punto cuatro]</li>
+ <li>[Punto cinco]</li>
+ </ul>
+
+ <div class="handout">
+
+ [Añade aquí cualquier nota o información que desees mostrar en la versión impresa, pero no en la versión en pantalla]
+
+ </div>
+
+ </div>
+ <!--fin slide-->
+
+</div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back-handout-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back-handout-print.png
new file mode 100755
index 000000000..9e49dd625
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back-handout-print.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back-slide-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back-slide-print.png
new file mode 100755
index 000000000..e8b5f9d82
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back-slide-print.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back_console.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back_console.png
new file mode 100755
index 000000000..ac1708379
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back_console.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-foot.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-foot.png
new file mode 100755
index 000000000..811b676bf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-foot.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-head.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-head.png
new file mode 100755
index 000000000..c1df59a15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-head.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-head.xcf b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-head.xcf
new file mode 100755
index 000000000..ff6497417
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-head.xcf
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-main.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-main.png
new file mode 100755
index 000000000..9ed390d97
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-main.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/favicon.ico
new file mode 100755
index 000000000..10ee10936
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/favicon.ico
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/logo.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/logo.png
new file mode 100755
index 000000000..119fe742e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/logo.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/table-background.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/table-background.png
new file mode 100755
index 000000000..89a7e4fa2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/table-background.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/table-header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/table-header.png
new file mode 100755
index 000000000..1001624dd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/table-header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pretty.css
new file mode 100755
index 000000000..e34ead879
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pretty.css
@@ -0,0 +1,545 @@
+/* Following are the presentation styles -- edit away! */
+
+body
+{
+ background: #FFF url(pics/background-main.png) top left repeat;
+ color: #000; font-size: 2em;
+/* font-family: Trebuchet MS, Arial, Helvetica, sans-serif; */
+ font-family: Arial, Helvetica, sans-serif;
+
+}
+
+:link, :visited
+{
+ text-decoration: none;
+ color: #00C;
+}
+
+
+
+h1, h2, h3, h4
+{
+ font-size: 100%;
+ margin: 0;
+ padding: 0;
+ font-weight: inherit;
+}
+
+h1 abbr
+{
+ font-variant: small-caps;
+}
+
+ul, pre
+{
+ margin: 0;
+ line-height: 1em;
+}
+
+html, body
+{
+ margin: 0;
+ padding: 0;
+}
+
+blockquote, q
+{
+ font-style: italic;
+}
+
+blockquote
+{
+ padding: 0 2em 0.5em;
+ margin: 0 1.5em 0.5em;
+ text-align: center;
+ font-size: 1em;
+}
+
+blockquote p
+{
+ margin: 0;
+}
+
+blockquote i
+{
+ font-style: normal;
+}
+
+blockquote b
+{
+ display: block;
+ margin-top: 0.5em;
+ font-weight: normal;
+ font-size: smaller;
+ font-style: normal;
+}
+
+blockquote b i
+{
+ font-style: italic;
+}
+
+kbd
+{
+ font-weight: bold;
+ font-size: 1em;
+}
+
+sup
+{
+ font-size: smaller;
+ line-height: 1px;
+}
+
+
+ul.urls
+{
+ list-style: none;
+ display: inline;
+ margin: 0;
+}
+
+.urls li
+{
+ display: inline;
+ margin: 0;
+}
+
+.notes
+{
+ display: none;
+}
+
+.external
+{
+ border-bottom: 1px dotted gray;
+}
+
+html>body .external
+{
+ border-bottom: none;
+}
+
+.external:after
+{
+ content: " \274F";
+ font-size: smaller;
+ color: #fff;
+}
+
+.incremental, .incremental *, .incremental *:after
+{
+ color: #fff;
+ visibility: visible;
+}
+
+img.incremental
+{
+ visibility: hidden;
+}
+
+.slide .current
+{
+ color: #fff;
+}
+
+
+/* ============== */
+/* === SLIDES === */
+/* ============== */
+
+.slide code
+{
+ padding: 2px 0.25em;
+ font-weight: bold;
+}
+
+.slide code.bad, code del
+{
+ color: red;
+}
+
+.slide code.old
+{
+ color: silver;
+}
+
+.slide pre
+{
+
+ color: #ffca00;
+ display:block;
+ font-weight:bold;
+ font-family: Arial, Sans-Serif !important;
+ font-size:41.5%;
+ line-height:1.5em;
+ background:#2e3436 url(pics/back_console.png) right bottom no-repeat ;
+ border:5px solid #ccc;
+ padding:1em 1em 1em 1em;
+
+
+}
+
+.slide pre code
+{
+ font-family: Arial, Sans-Serif !important;
+ display:block;
+ margin:0;
+ padding:0;
+}
+
+
+
+.slide ul
+{
+ margin-left: 5%;
+ margin-right: 7%;
+ list-style: disc;
+}
+
+.slide li
+{
+ margin-top: 0.75em;
+ margin-right: 0;
+}
+
+.slide ul ul
+{
+ line-height: 1;
+}
+
+.slide ul ul li
+{
+ margin: .2em;
+ font-size: 85%;
+ list-style: square;
+}
+
+.slide img.leader
+{
+ display: block;
+ margin: 0 auto;
+}
+
+
+/* ========================= */
+/* === HEADER AND FOOTER === */
+/* ========================= */
+
+div#logo
+{
+ position:absolute;
+ top:0%;
+ right:0%;
+ background:url(pics/logo.png) 50% 50% no-repeat;
+ height:200%;
+ width:150px;
+}
+
+div#header, div#footer
+{
+ background: #a80231;
+ color: #FFF;
+}
+
+
+div#header
+{
+ background:#000 url(pics/background-head.png) bottom left repeat-x;
+ line-height: 1px;
+}
+
+div#footer
+{
+ background:#000 url(pics/background-foot.png) top left repeat-x;
+ font-size: 0.5em;
+ font-weight: bold;
+ padding: 1em 0;
+}
+
+
+
+
+
+#footer h1, #footer h2
+{
+ display: block;
+ padding: 0 1em;
+}
+
+#footer h2
+{
+ font-style: italic;
+}
+
+
+
+/* ============== */
+/* === CLASES === */
+/* ============== */
+
+div.long
+{
+ font-size: 0.75em;
+}
+
+.slide h1
+{
+ position: absolute;
+ top: 0.7em;
+ left: 87px;
+ z-index: 1;
+ margin: 0;
+ padding: 0.3em 0 0 50px;
+ white-space: nowrap;
+ font-weight: bold;
+ font-size: 1em;
+
+ text-transform: capitalize;
+ color: #fff;
+ background: transparent;
+}
+
+.slide h3
+{
+ font-size: 130%;
+}
+
+/* ================ */
+/* === CONTROLS === */
+/* ================ */
+
+#controls :active
+{
+ color: #fff !important;
+}
+
+#controls :focus
+{
+ outline: 1px dotted #227;
+}
+
+
+/* ================ */
+/* === JESUSDA === */
+/* ================ */
+
+.first-pic
+{
+
+ float:right;
+ margin-top:-2em;
+}
+
+/* ================ */
+
+.align-center
+{
+ text-align:center;
+}
+/* ================ */
+
+.float-left , .left-column
+{
+ float:left !important;
+ width:49% !important;
+}
+
+.float-right , .right-column
+{
+ float:right !important;
+ width:49% !important;
+}
+/* ================ */
+.fullscreen
+{
+ z-index:1000 !important;
+ position:fixed !important;
+ top:0;
+ left:0;
+ width:100% !important;
+ height:100% !important;
+
+ background: #fff url(pics/background-main.png) top left no-repeat;
+
+ text-align:center;
+ margin-left:-1.65em;
+
+}
+
+.fullscreen h1
+{
+ display:none;
+}
+
+.rotulo
+{
+ font-size:800%;
+ text-align:center;
+ margin-top:-0.05em;
+
+}
+
+.rotulo2
+{
+ font-size:200%;
+ text-align:center;
+ font-weight:bolder;
+ margin-top:-0.05em;
+
+}
+
+.align-center img
+{
+ margin:auto;
+ text-align:center;
+ margin:0;
+}
+
+/* ========================= */
+/* === TABLAS === */
+/* ========================= */
+
+table
+{
+ background:url(pics/table-background.png) bottom left repeat-x #fff;
+ margin-right:1em;
+ font-size:70%;
+ border:1px solid #d2d7cf !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+table td
+{
+ padding:0.5em;
+ font-size:90%;
+ border:1px solid #d2d7cf !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+th
+{
+ background:url(pics/table-header.png) bottom left repeat-x #000;
+ color:#fff;
+}
+
+th a
+{
+ color:#fff !important;
+}
+
+
+
+table caption
+{
+ margin-bottom:1em;
+ margin-top:1em;
+ margin-left:-7em;
+
+
+}
+
+
+display-none
+{
+ display:none;
+}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/across.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/across.png
new file mode 100755
index 000000000..66cb21ce9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/across.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/blank.gif
new file mode 100755
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/bottom.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/bottom.png
new file mode 100755
index 000000000..79ed780d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/bottom.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/druplicon.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/druplicon.png
new file mode 100755
index 000000000..340b839bb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/druplicon.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/framing.css
new file mode 100755
index 000000000..c44e23877
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/framing.css
@@ -0,0 +1,65 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {
+ width: 100%;
+ top: 0;
+ left: 0;
+}
+
+div#header {
+ top: 0;
+ height: 3em;
+ z-index: 1;
+}
+
+div#footer {
+ top: auto;
+ bottom: 0;
+ height: 2.5em;
+ z-index: 5;
+}
+
+.slide {
+ top: 0;
+ width: 92%;
+ padding: 3.5em 4% 4%;
+ z-index: 2;
+ list-style: none;
+}
+
+div#controls {
+ left: 50%;
+ bottom: 0;
+ width: 50%;
+ z-index: 100;
+}
+
+div#controls form {
+ text-align: right;
+ width: 100%;
+ margin: 0;
+}
+
+#currentSlide {
+ position: absolute;
+ width: 10%;
+ left: 45%;
+ bottom: 1em;
+ z-index: 10;
+}
+
+html>body #currentSlide {
+ position: fixed;
+}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/iepngfix.htc
new file mode 100755
index 000000000..9ec89fbeb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/drupal/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes.css
new file mode 100755
index 000000000..5858cf2bc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes.css
@@ -0,0 +1,122 @@
+/* Following are the note styles -- edit away! */
+
+body {
+ margin: 0;
+ padding: 1.0em;
+ background: #333;
+ color: #FFF;
+ font: 2em/1.4em 'Lucida Grande', Verdana, sans-serif;
+}
+
+div.timers {
+ background: #FFF;
+ color: #333;
+ border: 0.08em solid #222;
+ border-top-width: 1px;
+ border-left-width: 1px;
+ float: left;
+ padding: 0.2em;
+ margin: 0 0 0.5em;
+ position: relative;
+}
+
+div.timers h1 {
+ text-align: left;
+ font-size: 0.6em;
+ line-height: 1.4em;
+ background-color: #FF9;
+ padding: 0 0.75em;
+ margin: 0.25em 0 0;
+ border: 1px solid #EE8;
+}
+
+div.timers div.controls {
+ position: absolute;
+ right: 0.25em;
+ top: 0.1em;
+ line-height: 1em;
+}
+
+div.timers h1 a {
+ text-decoration: none;
+ color: #000;
+}
+
+div.timers div.controls a {
+ font-size: 0.5em;
+ padding: 0;
+ color: #330;
+}
+
+div.timers a.control {
+ position: absolute;
+ text-decoration: none;
+ padding: 0 0.25em;
+ color: #AAA;
+ outline: 0;
+}
+
+#minus {
+ left: 0.25em;
+}
+
+#plus {
+ right: 0.25em;
+}
+
+.overtime {
+ background: yellow;
+ color: red;
+ border: 3px solid;
+ padding: 0.1em 0.25em;
+ font-weight: bold;
+}
+
+div.timers h2 {
+ font-size: 0.6em;
+ line-height: 1.0em;
+ font-weight: normal;
+ margin: 0 0 -0.25em;
+ padding-top: 0.5em;
+ color: #666;
+}
+
+div.timers p {margin: 0; padding: 0 0.5em;}
+div.timers form {margin: 0;}
+
+div.timers span.clock {
+ font-family: monospace;
+}
+
+div.timers ul {margin: 0; padding: 0; list-style: none;}
+div.timers li {float: left; width: 5em; margin: 0; padding: 0 0.5em;
+ text-align: center;}
+
+div#elapsed {width: 12.1em;}
+div#remaining {clear: left; width: 12.1em;}
+div#remaining p {text-align: center;}
+
+#slide,
+#next,
+#notes,
+#nextnotes {
+ font-size: 0.75em;
+ line-height: 1.4em;
+ clear: left;
+/* max-width: 30.0em; */
+ text-shadow: 0.1em 0.1em 0.1em #111;
+}
+
+#next {margin-top: 2.5em;}
+#next, #nextnotes {
+ color: #999;
+ font-size: 0.66em;
+}
+
+em.disclaimer {
+ color: #666;
+}
+
+div.collapsed h1 {display: block; font-size: 0.33em;}
+div.collapsed h1 a {display: inline;}
+div.collapsed * {display: none;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pretty.css
new file mode 100644
index 000000000..abe2c2659
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pretty.css
@@ -0,0 +1,354 @@
+/* Following are the presentation styles -- edit away! */
+
+body {
+ background: #1077BE url(top.png) no-repeat right top;
+ color: #FFF;
+ font-family: "Gill Sans", Optima, "Lucida Grande", Lucida, Verdana, sans-serif;
+ font-size: 2.25em;
+}
+
+:link, :visited {
+ text-decoration: none;
+ color: #62ccff;
+}
+
+#controls :active {
+ color: #88A !important;
+}
+
+#controls :focus {
+ outline: 1px dotted #227;
+}
+
+h1, h2, h3, h4 {
+ font-size: 100%;
+ margin: 0;
+ padding: 0;
+ font-weight: inherit;
+}
+
+ul, pre {
+ margin: 0;
+ line-height: 1em;
+}
+
+html, body {
+ margin: 0;
+ padding: 0;
+}
+
+blockquote, q {
+ font-style: italic;
+}
+
+blockquote {
+ padding: 0 2em 0.5em;
+ margin: 0 1.5em 0.5em;
+ text-align: center;
+ font-size: 1em;
+}
+
+blockquote p {
+ margin: 0;
+}
+
+blockquote i {
+ font-style: normal;
+}
+
+blockquote b {
+ display: block;
+ margin-top: 0.5em;
+ font-weight: normal;
+ font-size: smaller;
+ font-style: normal;
+}
+
+blockquote b i {
+ font-style: italic;
+}
+
+kbd {
+ font-weight: bold;
+ font-size: 1em;
+}
+
+sup {
+ font-size: smaller;
+ line-height: 1px;
+}
+
+.slide {
+ background: transparent url(druplicon.png) no-repeat 16px 16px;
+}
+
+.slide code {
+ padding: 2px 0.25em;
+ font-weight: bold;
+ color: white;
+ font-family: "Bitstream Vera Sans Mono", Monaco, "Lucida Console", monospace;
+ background-color: black;
+}
+
+.slide code.bad, code del {
+ color: red;
+}
+
+.slide code.old {
+ color: silver;
+}
+
+.slide pre {
+ font-family: "Bitstream Vera Sans Mono", Monaco, "Lucida Console", monospace;
+ padding: 0;
+ margin: 0.25em 0 0.5em 0.5em;
+ color: #533;
+ font-size: 90%;
+}
+
+.slide pre code {
+ display: block;
+}
+
+.slide ul {
+ margin-left: 5%;
+ margin-right: 7%;
+ list-style: disc;
+}
+
+.slide li {
+ margin-top: 0.75em;
+ margin-right: 0;
+}
+
+.slide ul ul {
+ line-height: 1;
+}
+
+.slide ul ul li {
+ margin: .2em;
+ font-size: 85%;
+ list-style: square;
+}
+
+.slide img.leader {
+ display: block;
+ margin: 0 auto;
+}
+
+div#header, div#footer {
+ color: #fff;
+ font-family: "Lucida Grande", Lucida, Verdana, sans-serif;
+}
+
+div#header {
+ line-height: 1px;
+}
+
+div#footer {
+ font-size: 0.5em;
+ font-weight: bold;
+ padding: 1em 0;
+ background: transparent url(bottom.png) repeat-x -546px top;
+}
+
+#footer h1, #footer h2 {
+ display: block;
+ padding: 0 1em;
+}
+
+#footer h2 {
+ font-style: italic;
+}
+
+div.long {
+ font-size: 0.75em;
+}
+
+.slide h1 {
+ position: absolute;
+ top: 0.7em;
+ width: 100%;
+ left: 0;
+ text-align: center;
+ z-index: 1;
+ margin: 0;
+ white-space: nowrap;
+ font: bold 150%/1em "Gill Sans", Optima, "Lucida Grande", Lucida, Verdana, sans-serif;
+ text-transform: capitalize;
+ color: #FFF;
+}
+
+.slide h3 {
+ font-size: 130%;
+}
+
+h1 abbr {
+ font-variant: small-caps;
+}
+
+#plink {
+ color: #FFF;
+}
+
+
+#currentSlide {
+ text-align: center;
+ font-size: 0.5em;
+ color: #449;
+}
+
+#slide0 {
+ background: transparent url(across.png) no-repeat;
+ padding-top: 3.5em;
+ font-size: 90%;
+}
+
+#slide0 h1 {
+ position: static;
+ margin: 1em 0 0;
+ padding: 0;
+ font: bold 3em "Gill Sans", Optima, "Lucida Grande", Lucida, Verdana, sans-serif;
+ white-space: normal;
+ color: #FFF;
+ background-color: transparent;
+}
+
+#slide0 h2 {
+ font: bold italic 1em Helvetica, sans-serif;
+ margin: 0.25em;
+}
+
+#slide0 h3 {
+ margin-top: 1.5em;
+ font-size: 1.5em;
+}
+
+#slide0 h4 {
+ margin-top: 0;
+ font-size: 1em;
+}
+
+ul.urls {
+ list-style: none;
+ display: inline;
+ margin: 0;
+}
+
+.urls li {
+ display: inline;
+ margin: 0;
+}
+
+.note {
+ display: none;
+}
+
+.external {
+ border-bottom: 1px dotted gray;
+}
+
+html>body .external {
+ border-bottom: none;
+}
+
+.external:after {
+ content: " \274F";
+ font-size: smaller;
+ color: #62ccff;
+}
+
+.incremental, .incremental *, .incremental *:after {
+ color: #DDE;
+ visibility: visible;
+}
+
+img.incremental {
+ visibility: hidden;
+}
+
+.slide .current {
+ color: #FB5;
+}
+
+
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/print.css
new file mode 100755
index 000000000..e7a71d145
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul {page-break-inside: avoid; visibility: visible !important;} h1 {page-break-after: avoid;} body {font-size: 12pt; background: white;} * {color: black;} #slide0 h1 {font-size: 200%; border: none; margin: 0.5em 0 0.25em;} #slide0 h3 {margin: 0; padding: 0;} #slide0 h4 {margin: 0 0 0.5em; padding: 0;} #slide0 {margin-bottom: 3em;} h1 {border-top: 2pt solid gray; border-bottom: 1px dotted silver;} .extra {background: transparent !important;} div.extra, pre.extra, .example {font-size: 10pt; color: #333;} ul.extra a {font-weight: bold;} p.example {display: none;} #header {display: none;} #footer h1 {margin: 0; border-bottom: 1px solid; color: gray; font-style: italic;} #footer h2, #controls {display: none;} /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * {display: none !important;} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/s5-core.css
new file mode 100755
index 000000000..ad1530b9c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout, .notes {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/top.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/top.png
new file mode 100755
index 000000000..9251f8935
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/top.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blume.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blume.jpg
new file mode 100644
index 000000000..248743c94
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blume.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blumerechts.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blumerechts.jpg
new file mode 100644
index 000000000..430d21174
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blumerechts.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pretty.css
new file mode 100644
index 000000000..0da0ff300
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pretty.css
@@ -0,0 +1,168 @@
+/* Flower Theme 2004 by Martin Hense ::: www.lounge7.de */
+
+/* Following are the presentation styles -- edit away!
+ Note that the 'body' font size may have to be changed if the resolution is
+ different than expected. */
+
+body {background: #fff url(blume.jpg) no-repeat; color: #222; font-size: 2em;}
+:link, :visited {text-decoration: none;}
+h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;}
+ul, pre {margin: 0; line-height: 1em;}
+html, body {margin: 0; padding: 0;}
+
+blockquote, q {font-style: italic;}
+blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;}
+blockquote p {margin: 0;}
+blockquote i {font-style: normal;}
+blockquote b {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;}
+blockquote b i {font-style: italic;}
+
+kbd {font-weight: bold; font-size: 1em;}
+sup {font-size: smaller; line-height: 1px;}
+
+code {padding: 2px 0.25em; font-weight: bold; color: #533;}
+code.bad, code del {color: red;}
+code.old {color: silver;}
+pre {padding: 0; margin: 0.25em 0 0.5em 0.5em; color: #533; font-size: 90%;}
+pre code {display: block;}
+ul {margin-right: 7%; margin-left: 50px; padding: 0; list-style: circle;}
+li {margin-top: 0.75em; margin-right: 0;}
+ul ul {line-height: 1;}
+ul ul li {margin: .2em; font-size: 85%; list-style: disc;}
+img.leader {display: block; margin: 0 auto;}
+
+div#header, div#footer {background: transparent; color: #BA9384;
+ font-family: Verdana, Helvetica, sans-serif;}
+div#header {line-height: 1px;}
+div#footer {font-size: 0.5em; font-weight: bold; padding: 1em 0;
+border-top: 1px solid #999999; background: #FFF0CF;}
+#footer h1, #footer h2 {display: block; padding: 0 1em;}
+#footer h2 {font-style: italic;}
+
+div.long {font-size: 0.75em;}
+.slide {
+font-family: georgia, times, 'Times New Roman', serif; background: transparent url(blumerechts.jpg) right top no-repeat;
+}
+.slide h1 {position: absolute; z-index: 1;
+ margin: 0; padding: 0.3em 0 0 50px; white-space: nowrap;
+ text-transform: capitalize;
+ top: 35px; left: 60px; color: #4A040A;
+ font: 150%/1em georgia, times, 'Times New Roman', serif;
+ background: transparent;}
+.slide h3 {font-size: 130%;}
+h1 abbr {font-variant: small-caps;}
+
+
+#currentSlide {text-align: center; font-size: 0.5em;
+color: #646587; font-family: Verdana, Helvetica, sans-serif; font-weight: bold;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 1.33em; padding: 0;
+ white-space: normal;
+ color: #000; background: transparent;
+ font: 2em georgia, times, 'Times New Roman', serif;}
+#slide0 h3 {margin-top: 0.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.notes {display: none;}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/bg-slide.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/bg-slide.jpg
new file mode 100755
index 000000000..6da2a0090
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/bg-slide.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/framing.css
new file mode 100644
index 000000000..24b5fb0e4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size and place the slide components.
+ Edit them if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; left: 0; z-index: 1;}
+div#footer {top: auto; bottom: 0; width: 100%; z-index: 5;}
+.slide {top: 0; width: 80%; padding: 1em 9% 2em 9%; z-index: 2; height: 100%;}
+
+div#controls {bottom: 1.5em; left: 0; width: 100%; text-align: center; z-index: 1000;}
+div#controls form {margin: 0; padding: 0;}
+
+#currentSlide {position: absolute; left: 0; bottom: 0.5em; z-index: 10;
+ width: 100%; text-align: center;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/iepngfix.htc
new file mode 100755
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pretty.css
new file mode 100644
index 000000000..80fad55d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pretty.css
@@ -0,0 +1,130 @@
+/*
+ Theme: Drupal S5
+*/
+
+html {
+ height: 99%;
+}
+
+body {background: #E5F3FC url('bg-slide.jpg');
+ background-position: bottom left;
+ height: 100%;
+ color: #012C46; font: 32px Arial, sans-serif;}
+a {text-decoration: none; color: #336; border-bottom: 1px dotted;}
+h1, h2, h3, h4, h5, h6 {font-size: 1em; margin: 0;}
+sup {font-size: 0.75em; font-weight: normal;
+ vertical-align: 0.5em; line-height: 1px;}
+ul {margin-left: 1em; padding-left: 0;}
+li {margin-bottom: 0.66em;}
+li li {margin: 0.33em 0; font-size: smaller;}
+
+#header {background: transparent;
+ padding-bottom: 2em;}
+#footer {color: #BBB; border-top: 0px solid #333;}
+#header, #footer {font-size: 0.5em;}
+#footer h1, #footer h2 { padding: 0.5em 0.75em;
+ font-weight: normal;}
+#footer h1 {left: 0; font-size: 1em; letter-spacing: 10px;}
+#footer h2 {position: absolute; bottom: 10; right: 10;}
+
+#navList {margin-top: 3px;}
+
+.slide h1 {font-size: 1.3em; line-height: 1; letter-spacing: -1px;
+ margin: 0 -15% 2em 0; padding: 0.25em 15% 0.06125em 0;}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/s5-core.css
new file mode 100644
index 000000000..3b0428edb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, div.slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body div.slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+div.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.css
new file mode 100644
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/LEEME.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/LEEME.txt
new file mode 100755
index 000000000..f656fa7de
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/LEEME.txt
@@ -0,0 +1,32 @@
+GORILLA
+(Based on the gorilla icon from the gorilla icon theme by Jakub Steiner)
+
+Tema para S5, creado originalmente por jEsuSdA 8)
+http://www.jesusda.com
+
+Más temas en: http://www.jesusda.com/projects/presentaciones_s5
+
+
+
+Para customizar este tema modifica el archivo CSS:
+
+s5-ultraviolet/ui/default/pretty.css
+
+
+
+Los archivos gráficos referentes al tema están en la carpeta:
+
+/ui/default/pics
+
+
+Puedes personalizar el favicon copiando el tuyo en la carpeta:
+
+/ui/default/pics
+
+con el nombre favicon.ico
+
+
+
+Para cualquier sugerencia e idea, por favor, contacta conmigo a través de mi web. ;)
+
+--jEsuSdA 8) \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/blank.gif
new file mode 100755
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/iepngfix.htc
new file mode 100755
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/index.html
new file mode 100755
index 000000000..39d8f46ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/index.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es-es" >
+
+
+<head>
+
+ <title>[Título de la presentación aquí]</title>
+ <!-- metadata -->
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta http-equiv="content-language" content="es" />
+
+ <!--titulo y datos de publicación de la presentación-->
+
+ <meta name="description" content="[Título de la presentación aquí]" />
+
+ <meta name="keywords" content="[keywords aquí]" />
+ <meta name="presdate" content="[Aquí la fecha de publicación en formato aaaammdd]" />
+
+ <meta name="author" lang="es" content="[Nombre del autor de la presentación aquí]" />
+ <meta name="company" content="[Organización del autor de la presentación aquí]" />
+
+ <link rel="shortcut icon" href="ui/default/pics/favicon.ico" />
+
+ <meta name="generator" content="S5" />
+ <meta name="progid" content="quanta+" />
+ <meta name="version" content="S5 · jEsuSdA · 1.1" />
+ <!--Versión adaptada del estandard S5 1.1 por jEsuSdA-->
+
+ <meta name="robots" content="all" />
+
+ <!-- configuration parameters -->
+ <meta name="defaultView" content="slideshow" />
+ <meta name="controlVis" content="hidden" />
+
+ <!-- style sheet links -->
+ <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
+ <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
+ <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
+ <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
+
+ <!-- S5 JS -->
+ <script src="ui/default/slides.js" type="text/javascript"></script>
+
+</head>
+
+<body>
+
+ <div class="layout">
+ <div id="controls"><!-- NO EDITAR --></div>
+ <div id="currentSlide"><!-- NO EDITAR --></div>
+
+ <div id="header">
+ <div id="logo"><!-- NO EDITAR --></div>
+ </div>
+
+ </div>
+
+ <div id="footer">
+ <h1>[Lugar/Fecha de la presentación aquí]</h1>
+ <h2>[Título de la presentación aquí]</h2>
+ </div>
+
+
+
+
+<div class="presentation">
+
+ <div class="slide">
+ <h1>[Título de la presentación aquí]</h1>
+ <h3>[Nombre del ponente aquí]</h3>
+ <h4>[Datos extra aquí]</h4>
+ </div>
+
+
+ <div class="slide">
+ <h1>[Título de la diapositiva]</h1>
+
+ <ul>
+ <li>[Punto uno]</li>
+ <li>[Punto dos]</li>
+ <li>[Punto tres]</li>
+ <li>[Punto cuatro]</li>
+ <li>[Punto cinco]</li>
+ </ul>
+
+ <div class="handout">
+
+ [Añade aquí cualquier nota o información que desees mostrar en la versión impresa, pero no en la versión en pantalla]
+
+ </div>
+
+ </div>
+ <!--fin slide-->
+
+</div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back-handout-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back-handout-print.png
new file mode 100755
index 000000000..9e49dd625
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back-handout-print.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back-slide-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back-slide-print.png
new file mode 100755
index 000000000..e8b5f9d82
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back-slide-print.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back_console.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back_console.png
new file mode 100755
index 000000000..ac1708379
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back_console.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-foot.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-foot.png
new file mode 100755
index 000000000..e007d2946
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-foot.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-head.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-head.png
new file mode 100755
index 000000000..20c90e79d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-head.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-main.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-main.png
new file mode 100755
index 000000000..28e8eee94
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-main.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-main2.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-main2.png
new file mode 100755
index 000000000..074709b5f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-main2.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/favicon.ico
new file mode 100755
index 000000000..834bd85a5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/favicon.ico
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/logo.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/logo.png
new file mode 100755
index 000000000..b542561d7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/logo.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/table-background.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/table-background.png
new file mode 100755
index 000000000..89a7e4fa2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/table-background.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/table-header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/table-header.png
new file mode 100755
index 000000000..565c6fd87
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/table-header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pretty.css
new file mode 100755
index 000000000..aebdafd61
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pretty.css
@@ -0,0 +1,583 @@
+/* Following are the presentation styles -- edit away! */
+
+body
+{
+ background: #FFF url(pics/background-main.png) top left repeat;
+ color: #5d4e3b; font-size: 2em;
+/* font-family: Trebuchet MS, Arial, Helvetica, sans-serif; */
+ font-family: Arial, Helvetica, sans-serif;
+
+}
+
+:link, :visited
+{
+ text-decoration: none;
+ color: #00C;
+}
+
+
+
+h1, h2, h3, h4
+{
+ font-size: 100%;
+ margin: 0;
+ padding: 0;
+ font-weight: inherit;
+}
+
+h1 abbr
+{
+ font-variant: small-caps;
+}
+
+ul, pre
+{
+ margin: 0;
+ line-height: 1em;
+}
+
+html, body
+{
+ margin: 0;
+ padding: 0;
+}
+
+blockquote, q
+{
+ font-style: italic;
+}
+
+blockquote
+{
+ padding: 0 2em 0.5em;
+ margin: 0 1.5em 0.5em;
+ text-align: center;
+ font-size: 1em;
+}
+
+blockquote p
+{
+ margin: 0;
+}
+
+blockquote i
+{
+ font-style: normal;
+}
+
+blockquote b
+{
+ display: block;
+ margin-top: 0.5em;
+ font-weight: normal;
+ font-size: smaller;
+ font-style: normal;
+}
+
+blockquote b i
+{
+ font-style: italic;
+}
+
+kbd
+{
+ font-weight: bold;
+ font-size: 1em;
+}
+
+sup
+{
+ font-size: smaller;
+ line-height: 1px;
+}
+
+
+ul.urls
+{
+ list-style: none;
+ display: inline;
+ margin: 0;
+}
+
+.urls li
+{
+ display: inline;
+ margin: 0;
+}
+
+.notes
+{
+ display: none;
+}
+
+.external
+{
+ border-bottom: 1px dotted gray;
+}
+
+html>body .external
+{
+ border-bottom: none;
+}
+
+.external:after
+{
+ content: " \274F";
+ font-size: smaller;
+ color: #fff;
+}
+
+.incremental, .incremental *, .incremental *:after
+{
+ color: #fff;
+ visibility: visible;
+}
+
+img.incremental
+{
+ visibility: hidden;
+}
+
+.slide .current
+{
+ color: #fff;
+}
+
+
+/* ============== */
+/* === SLIDES === */
+/* ============== */
+
+.slide code
+{
+ padding: 2px 0.25em;
+ font-weight: bold;
+}
+
+.slide code.bad, code del
+{
+ color: red;
+}
+
+.slide code.old
+{
+ color: silver;
+}
+
+.slide pre
+{
+
+ color: #ffca00;
+ display:block;
+ font-weight:bold;
+ font-family: Arial, Sans-Serif !important;
+ font-size:41.5%;
+ line-height:1.5em;
+ background:#2e3436 url(pics/back_console.png) right bottom no-repeat ;
+ border:5px solid #ccc;
+ padding:1em 1em 1em 1em;
+
+
+}
+
+.slide pre code
+{
+ font-family: Arial, Sans-Serif !important;
+ display:block;
+ margin:0;
+ padding:0;
+}
+
+
+
+.slide ul
+{
+ margin-left: 5%;
+ margin-right: 7%;
+ list-style: disc;
+}
+
+.slide li
+{
+ margin-top: 0.75em;
+ margin-right: 0;
+}
+
+.slide ul ul
+{
+ line-height: 1;
+}
+
+.slide ul ul li
+{
+ margin: .2em;
+ font-size: 85%;
+ list-style: square;
+}
+
+.slide img.leader
+{
+ display: block;
+ margin: 0 auto;
+}
+
+
+/* ========================= */
+/* === HEADER AND FOOTER === */
+/* ========================= */
+
+div#logo
+{
+ position:absolute;
+ top:0%;
+ right:0%;
+ background:url(pics/logo.png) 50% 50% no-repeat;
+ height:200%;
+ width:150px;
+}
+
+div#header, div#footer
+{
+ background: #a80231;
+ color: #FFF;
+}
+
+
+div#header
+{
+ background:url(pics/background-head.png) bottom left no-repeat transparent;
+ line-height: 1px;
+}
+
+div#footer
+{
+ background:#7ea1c9 url(pics/background-foot.png) top left repeat-x;
+ font-size: 0.5em;
+ font-weight: bold;
+ padding: 1em 0;
+}
+
+
+
+
+
+#footer h1, #footer h2
+{
+ display: block;
+ padding: 0 1em;
+}
+
+#footer h2
+{
+ font-style: italic;
+}
+
+
+
+/* ============== */
+/* === CLASES === */
+/* ============== */
+
+div.long
+{
+ font-size: 0.75em;
+}
+
+.slide h1
+{
+ position: absolute;
+ top: 0.7em;
+ left: 87px;
+ z-index: 1;
+ margin: 0;
+ padding: 0.3em 0 0 50px;
+ white-space: nowrap;
+ font-weight: bold;
+ font-size: 150%/1em;
+
+ text-transform: capitalize;
+ color: #fff;
+ background: transparent;
+}
+
+.slide h3
+{
+ font-size: 130%;
+}
+
+/* ================ */
+/* === CONTROLS === */
+/* ================ */
+
+#currentSlide
+{
+ text-align: center;
+ font-size: 0.6em;
+ font-weight:bold;
+ color: #fff;
+}
+
+#slide0
+{
+ padding-top: 3.5em;
+ font-size: 90%;
+}
+
+#slide0 h1
+{
+ position: static;
+ margin: 1em 0 0;
+ padding: 0;
+/* font: bold 2em Helvetica, sans-serif; */
+ font-weight: bold;
+ font-size:2em;
+ white-space: normal;
+ color: #000;
+ background: transparent;
+}
+
+#slide0 h2
+{
+ font-weight: bold;
+ font-style: italic;
+ font-size: 1em;
+ margin: 0.25em;
+}
+
+#slide0 h3
+{
+ margin-top: 1.5em;
+ font-size: 1.5em;
+}
+
+#slide0 h4
+{
+ margin-top: 0;
+ font-size: 1em;
+}
+
+/* ================ */
+/* === JESUSDA === */
+/* ================ */
+
+.first-pic
+{
+
+ float:right;
+ margin-top:-2em;
+}
+
+/* ================ */
+
+.align-center
+{
+ text-align:center;
+}
+/* ================ */
+
+.float-left , .left-column
+{
+ float:left !important;
+ width:49% !important;
+}
+
+.float-right , .right-column
+{
+ float:right !important;
+ width:49% !important;
+}
+/* ================ */
+.fullscreen
+{
+ z-index:1000 !important;
+ position:fixed !important;
+ top:0;
+ left:0;
+ width:100% !important;
+ height:100% !important;
+
+ background: #fff url(pics/background-main.png) top left no-repeat;
+
+ text-align:center;
+ margin-left:-1.65em;
+
+}
+
+.fullscreen h1
+{
+ display:none;
+}
+
+.rotulo
+{
+ font-size:800%;
+ text-align:center;
+ margin-top:-0.05em;
+
+}
+
+.rotulo2
+{
+ font-size:200%;
+ text-align:center;
+ font-weight:bolder;
+ margin-top:-0.05em;
+
+}
+
+.align-center img
+{
+ margin:auto;
+ text-align:center;
+ margin:0;
+}
+
+/* ========================= */
+/* === TABLAS === */
+/* ========================= */
+
+table
+{
+ background:url(pics/table-background.png) bottom left repeat-x #fff;
+ margin-right:1em;
+ font-size:70%;
+ border:1px solid #5d4e3b !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+table td
+{
+ padding:0.5em;
+ font-size:90%;
+ border:1px solid #5d4e3b !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+th
+{
+ background:url(pics/table-header.png) bottom left repeat-x #6b5a45;
+ color:#fff;
+}
+
+th a
+{
+ color:#fff !important;
+}
+
+
+
+table caption
+{
+ margin-bottom:1em;
+ margin-top:1em;
+ margin-left:-7em;
+
+
+}
+
+
+display-none
+{
+ display:none;
+}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/blank.gif
new file mode 100644
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/finish.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/finish.gif
new file mode 100644
index 000000000..55e1ff95e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/finish.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/fixed.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/fixed.js
new file mode 100644
index 000000000..118ae7005
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/fixed.js
@@ -0,0 +1 @@
+// fixed.js: fix fixed positioning and fixed backgrounds in IE/Win // version 1.8, 08-Aug-2003 // written by Andrew Clover <and@doxdesk.com>, use freely /*@cc_on @if (@_win32 && @_jscript_version>4) var fixed_positions= new Array(); var fixed_backgrounds= new Array(); var fixed_viewport; // Initialisation. Called when the <body> tag arrives. Set up viewport so the // rest of the script knows we're going, and add a measurer div, used to detect // font size changes and measure image sizes for backgrounds later function fixed_init() { fixed_viewport= (document.compatMode=='CSS1Compat') ? document.documentElement : document.body; var el= document.createElement('div'); el.setAttribute('id', 'fixed-measure'); el.style.position= 'absolute'; el.style.top= '0'; el.style.left= '0'; el.style.overflow= 'hidden'; el.style.visibility= 'hidden'; el.style.fontSize= 'xx-large'; el.style.height= '5em'; el.style.setExpression('width', 'fixed_measureFont()'); document.body.insertBefore(el, document.body.firstChild); } // Binding. Called every time an element is added to the document, check it // for fixed features, if found add to our lists and set initial props function fixed_bind(el) { var needLayout= false; var tag= el.tagName.toLowerCase(); var st= el.style; var cst= el.currentStyle; var anc; // find fixed-position elements if (cst.position=='fixed') { needLayout= true; fixed_positions[fixed_positions.length]= el; // store original positioning as we'll overwrite it st.position= 'absolute'; st.fixedPLeft= cst.left; st.fixedPTop= cst.top; st.fixedPRight= cst.right; st.fixedPBottom= cst.bottom; st.fixedPWidth= fixed_parseLength(cst.width); st.fixedPHeight= fixed_parseLength(cst.height); // find element that will act as containing box, for convenience later st.fixedCB= null; for (anc= el; (anc= anc.parentElement).parentElement;) { if (anc.currentStyle.position!='static') { st.fixedCB= anc; break; } } // detect nested fixed positioning (only ancestor need move) st.fixedNest= false; for (anc= el; anc= anc.parentElement;) { if (anc.style.fixedNest!=null) st.fixedNest= true; break; } } // find fixed-background elements (not body/html which IE already gets right) if (cst.backgroundAttachment=='fixed' && tag!='body' && tag!='html') { needLayout= true; fixed_backgrounds[fixed_backgrounds.length]= el; // get background offset, converting from keyword if necessary st.fixedBLeft= fixed_parseLength(cst.backgroundPositionX); st.fixedBTop= fixed_parseLength(cst.backgroundPositionY); // if it's a non-zero %age, need to know size of image for layout if (st.fixedBLeft[1]=='%' || st.fixedBTop[1]=='%') { st.fixedBWidth= 0; st.fixedBHeight= 0; fixed_measureBack(el); } } if (needLayout) fixed_layout(); } // Layout. On every window or font size change, recalculate positioning // Request re-layout at next free moment var fixed_delaying= false; function fixed_delayout() { if (fixed_delaying) return; fixed_delaying= true; window.setTimeout(fixed_layout, 0); } var fixed_ARBITRARY= 200; function fixed_layout() { fixed_delaying= false; if (!fixed_viewport) return; var i, el, st, j, pr, tmp, A= 'auto'; var cb, cbLeft, cbTop, cbRight, cbBottom, oLeft, oTop, oRight, oBottom; var vpWidth=fixed_viewport.clientWidth, vpHeight=fixed_viewport.clientHeight; // calculate initial position for fixed-position elements [black magic] for (i= fixed_positions.length; i-->0;) { el= fixed_positions[i]; st= el.style; // find positioning of containing block cb= st.fixedCB; if (!cb) cb= fixed_viewport; cbLeft= fixed_pageLeft(cb); cbTop= fixed_pageTop(cb); if (cb!=fixed_viewport) { cbLeft+= cb.clientLeft; cbTop+= cb.clientTop; } cbRight= fixed_viewport.clientWidth-cbLeft-cb.clientWidth; cbBottom= fixed_viewport.clientHeight-cbTop-cb.clientHeight; // if size is in %, must recalculate relative to viewport if (st.fixedPWidth[1]=='%') st.width= Math.round(vpWidth*st.fixedPWidth[0]/100)+'px'; if (st.fixedPHeight[1]=='%') st.height= Math.round(vpHeight*st.fixedPHeight[0]/100)+'px'; // find out offset values at max size, to account for margins st.left= A; st.right= '0'; st.top= A; st.bottom= '0'; oRight= el.offsetLeft+el.offsetWidth; oBottom= el.offsetTop+el.offsetHeight; st.left= '0'; st.right= A; st.top= '0'; st.bottom= A; oLeft= el.offsetLeft; oTop= el.offsetTop; // use this to convert all edges to pixels st.left= A; st.right= st.fixedPRight; st.top= A; st.bottom= st.fixedPBottom; oRight-= el.offsetLeft+el.offsetWidth; oBottom-= el.offsetTop+el.offsetHeight; st.left= st.fixedPLeft; st.top= st.fixedPTop; oLeft= el.offsetLeft-oLeft; oTop= el.offsetTop-oTop; // edge positioning fix if (st.fixedPWidth[1]==A && st.fixedPLeft!=A && st.fixedPRight!=A) { tmp= el.offsetLeft; st.left= A; st.width= fixed_ARBITRARY+'px'; tmp= fixed_ARBITRARY+el.offsetLeft-tmp+cbLeft+cbRight; st.left= st.fixedPLeft; st.width= ((tmp<1)?1:tmp)+'px'; } if (st.fixedPHeight[1]==A && st.fixedPTop!=A && st.fixedPBottom!=A) { tmp= el.offsetTop; st.top= A; st.height= fixed_ARBITRARY+'px'; tmp= fixed_ARBITRARY+el.offsetTop-tmp+cbTop+cbBottom; st.top= st.fixedPTop; st.height= ((tmp<1)?1:tmp)+'px'; } // move all non-auto edges relative to the viewport st.fixedCLeft= (st.fixedPLeft=='auto') ? oLeft : oLeft-cbLeft; st.fixedCTop= (st.fixedPTop=='auto') ? oTop : oTop-cbTop; st.fixedCRight= (st.fixedPRight=='auto') ? oRight : oRight-cbRight; st.fixedCBottom= (st.fixedPBottom=='auto') ? oBottom : oBottom-cbBottom; // remove left-positioning of right-positioned elements if (st.fixedPLeft=='auto' && st.fixedPRight!='auto') st.fixedCLeft= 'auto'; if (st.fixedPTop=='auto' && st.fixedPBottom!='auto') st.fixedCTop= 'auto'; } // calculate initial positioning of fixed backgrounds for (i= fixed_backgrounds.length; i-->0;) { el= fixed_backgrounds[i]; st= el.style; tmp= st.fixedBImage; if (tmp) { if (tmp.readyState!='uninitialized') { st.fixedBWidth= tmp.offsetWidth; st.fixedBHeight= tmp.offsetHeight; st.fixedBImage= window.undefined; } } st.fixedBX= fixed_length(el, st.fixedBLeft, vpWidth-st.fixedBWidth); st.fixedBY= fixed_length(el, st.fixedBTop, vpHeight-st.fixedBHeight); } // now call scroll() to set the positions from the values just calculated fixed_scroll(); } // Scrolling. Offset fixed elements relative to viewport scrollness var fixed_lastX, fixed_lastY; var fixed_PATCHDELAY= 300; var fixed_patching= false; // callback function after a scroll, because incorrect scroll position is // often reported first go! function fixed_patch() { fixed_patching= false; var scrollX= fixed_viewport.scrollLeft, scrollY= fixed_viewport.scrollTop; if (scrollX!=fixed_lastX && scrollY!=fixed_lastY) fixed_scroll(); } function fixed_scroll() { if (!fixed_viewport) return; var i, el, st, viewportX, viewportY; var scrollX= fixed_viewport.scrollLeft, scrollY= fixed_viewport.scrollTop; fixed_lastX= scrollX; fixed_lastY= scrollY; // move non-nested fixed-position elements for (i= fixed_positions.length; i-->0;) { st= fixed_positions[i].style; viewportX= (st.fixedNest) ? 0 : scrollX; viewportY= (st.fixedNest) ? 0 : scrollY; if (st.fixedCLeft!='auto') st.left= (st.fixedCLeft+viewportX)+'px'; if (st.fixedCTop!='auto') st.top= (st.fixedCTop+viewportY)+'px'; viewportX= (st.fixedCB==null || st.fixedCB==fixed_viewport) ? 0 : viewportX; viewportY= (st.fixedCB==null || st.fixedCB==fixed_viewport) ? 0 : viewportY; st.right= (st.fixedCRight-viewportX+1)+'px'; st.right= (st.fixedCRight-viewportX)+'px'; st.bottom= (st.fixedCBottom-viewportY+1)+'px'; st.bottom= (st.fixedCBottom-viewportY)+'px'; } // align fixed backgrounds to viewport for (i= fixed_backgrounds.length; i-->0;) { el= fixed_backgrounds[i]; st= el.style; viewportX= scrollX; viewportY= scrollY; while (el.offsetParent) { viewportX-= el.offsetLeft+el.clientLeft; viewportY-= el.offsetTop +el.clientTop; el= el.offsetParent; } st.backgroundPositionX= (st.fixedBX+viewportX)+'px'; st.backgroundPositionY= (st.fixedBY+viewportY)+'px'; } // call back again in a tic if (!fixed_patching) { fixed_patching= true; window.setTimeout(fixed_patch, fixed_PATCHDELAY); } } // Measurement. Load bg-image into an invisible element on the page, when // loaded write the width/height to an element's style for layout use; detect // when font size changes function fixed_measureBack(el) { var measure= document.getElementById('fixed-measure'); var img= document.createElement('img'); img.setAttribute('src', fixed_parseURL(el.currentStyle.backgroundImage)); measure.appendChild(img); el.style.fixedBImage= img; if (img.readyState=='uninitialized') img.attachEvent('onreadystatechange', fixed_measureBackImage_ready); } function fixed_measureBackImage_ready() { var img= event.srcElement; if (img && img.readyState!='uninitialized') { img.detachEvent('onreadystatechange', fixed_measureBackImage_ready); fixed_layout(); } } var fixed_fontsize= 0; function fixed_measureFont() { var fs= document.getElementById('fixed-measure').offsetHeight; if (fixed_fontsize!=fs && fixed_fontsize!=0) fixed_delayout(); fixed_fontsize= fs; return '5em'; } // Utility. General-purpose functions // parse url() to get value inside function fixed_parseURL(v) { v= v.substring(4, v.length-1); if (v.charAt(0)=='"' && v.charAt(v.length-1)=='"' || v.charAt(0)=="'" && v.charAt(v.length-1)=="'") return v.substring(1, v.length-1); else return v; } // parse length or auto or background-position keyword into number and unit var fixed_numberChars= '+-0123456789.'; var fixed_ZERO= new Array(0, 'px'); var fixed_50PC= new Array(50, '%'); var fixed_100PC= new Array(100, '%'); var fixed_AUTO= new Array(0, 'auto'); function fixed_parseLength(v) { var num, i; if (v=='left' || v=='top') return fixed_ZERO; if (v=='right' || v=='bottom') return fixed_100PC; if (v=='center') return fixed_50PC; if (v=='auto') return fixed_AUTO; i= 0; while (i<v.length && fixed_numberChars.indexOf(v.charAt(i))!=-1) i++; num= parseFloat(v.substring(0, i)); if (num==0) return fixed_ZERO; else return new Array(num, v.substring(i)); } // convert parsed (number, unit) into a number of pixels function fixed_length(el, l, full) { var tmp, x; if (l[1]=='px') return l[0]; if (l[1]=='%') return Math.round(full*l[0]/100); // other units - measure by setting position; this is rather inefficient // but then these units are used for background-position so seldom... tmp= el.currentStyle.left; el.style.left= '0'; x= el.offsetLeft; el.style.left= l[0]+l[1]; x= el.offsetLeft-x; el.style.left= tmp; return x; } // convert stupid IE offsetLeft/Top to page-relative values function fixed_pageLeft(el) { var v= 0; while (el.offsetParent) { v+= el.offsetLeft; el= el.offsetParent; } return v; } function fixed_pageTop(el) { var v= 0; while (el.offsetParent) { v+= el.offsetTop; el= el.offsetParent; } return v; } // Scanning. Check document every so often until it has finished loading. Do // nothing until <body> arrives, then call main init. Pass any new elements // found on each scan to be bound var fixed_SCANDELAY= 500; function fixed_scan() { if (!document.body) return; if (!fixed_viewport) fixed_init(); var el; for (var i= 0; i<document.all.length; i++) { el= document.all[i]; if (!el.fixed_bound) { el.fixed_bound= true; fixed_bind(el); } } } var fixed_scanner; function fixed_stop() { window.clearInterval(fixed_scanner); fixed_scan(); } fixed_scan(); fixed_scanner= window.setInterval(fixed_scan, fixed_SCANDELAY); window.attachEvent('onload', fixed_stop); window.attachEvent('onresize', fixed_delayout); window.attachEvent('onscroll', fixed_scroll); @end @*/ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/help.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/help.jpg
new file mode 100644
index 000000000..9be4d3369
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/help.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/iepngfix.htc
new file mode 100644
index 000000000..12a8b89f7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/graphic_support/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/numeric.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/numeric.png
new file mode 100644
index 000000000..8f911e778
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/numeric.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/progress.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/progress.gif
new file mode 100644
index 000000000..132368469
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/progress.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/00_head.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/00_head.txt
new file mode 100644
index 000000000..2900ef421
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/00_head.txt
@@ -0,0 +1,8 @@
+<!-- style sheet links -->
+<link rel="stylesheet" href="ui/i18n/slides.css" type="text/css" media="projection" id="slideProj" />
+<link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
+<link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
+<link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
+
+<!-- S5 JS -->
+<script src="ui/default/slides.js" type="text/javascript"></script>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-shade.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-shade.png
new file mode 100644
index 000000000..172c914f6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-shade.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-slide.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-slide.jpg
new file mode 100644
index 000000000..6be0296db
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-slide.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pretty.css
new file mode 100644
index 000000000..f47a7b5a7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pretty.css
@@ -0,0 +1,139 @@
+/*
+ Theme: i18n
+ Eric A. Meyer (http://meyerweb.com/)
+ Theme placed under CC by-sa 2.0 license
+*/
+
+body {background: #95A7D4 url(bg-slide.jpg) 100% 100% no-repeat; color: #210; font: 28px Arial, sans-serif;}
+a {text-decoration: none; color: #336; border-bottom: 1px dotted;}
+h1, h2, h3, h4, h5, h6 {font-size: 1em; margin: 0;}
+sup {font-size: 0.75em; font-weight: normal;
+ vertical-align: 0.5em; line-height: 1px;}
+ul {margin-left: 1em; padding-left: 0;}
+li {margin-bottom: 0.66em;}
+li li {margin: 0.33em 0; font-size: smaller;}
+
+#header {background: url(bg-shade.png); border-bottom: 1px solid #333;
+ padding-bottom: 2em;}
+#footer {background: url(bg-shade.png); color: #BBB; border-top: 1px solid #333;}
+#header, #footer {font-size: 0.5em;}
+#footer h1, #footer h2 { padding: 0.5em 0.75em;
+ font-weight: normal; font-style: italic;}
+#footer h1 {left: 0; font-size: 1em; letter-spacing: 1px;}
+#footer h2 {position: absolute; bottom: 0; right: 0;}
+
+
+#currentSlide {font-size: 0.5em;}
+#currentSlide span {font-size: 13px; color: rgb(49%,47%,66%);}
+#currentSlide #csSep {display: none;}
+#currentSlide #csHere {font-weight: bold;}
+#currentSlide #csHere:before {content: "#"; font-weight: normal;}
+#currentSlide #csTotal:before {content: " of ";}
+
+.slide h1 {font-size: 1.66em; line-height: 1; letter-spacing: -1px;
+ margin: 0 -15% 1em 0; padding: 0.5em 15% 0.06125em 0; border-bottom: 0.06125em solid rgb(90,94,120);}
+#slide0 h1 {border: none; font-size: 2.25em; letter-spacing: 0; margin: 3em 0 1.5em;}
+#slide0 h3 {margin: 0.5em 0 0;}
+#slide0 h4 {margin-top: 0; font-size: smaller;}
+
+.slide .current {color: #003; text-shadow: 0 0 0.25em #9AABD7;}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.notes {display: none;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/LEEME.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/LEEME.txt
new file mode 100755
index 000000000..c4f982126
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/LEEME.txt
@@ -0,0 +1,31 @@
+MANDARINA
+
+Tema para S5, creado originalmente por jEsuSdA 8)
+http://www.jesusda.com
+
+Más temas en: http://www.jesusda.com/projects/presentaciones_s5
+
+
+
+Para customizar este tema modifica el archivo CSS:
+
+s5-ultraviolet/ui/default/pretty.css
+
+
+
+Los archivos gráficos referentes al tema están en la carpeta:
+
+/ui/default/pics
+
+
+Puedes personalizar el favicon copiando el tuyo en la carpeta:
+
+/ui/default/pics
+
+con el nombre favicon.ico
+
+
+
+Para cualquier sugerencia e idea, por favor, contacta conmigo a través de mi web. ;)
+
+--jEsuSdA 8) \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/blank.gif
new file mode 100755
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/iepngfix.htc
new file mode 100755
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/index.html
new file mode 100755
index 000000000..39d8f46ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/index.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es-es" >
+
+
+<head>
+
+ <title>[Título de la presentación aquí]</title>
+ <!-- metadata -->
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta http-equiv="content-language" content="es" />
+
+ <!--titulo y datos de publicación de la presentación-->
+
+ <meta name="description" content="[Título de la presentación aquí]" />
+
+ <meta name="keywords" content="[keywords aquí]" />
+ <meta name="presdate" content="[Aquí la fecha de publicación en formato aaaammdd]" />
+
+ <meta name="author" lang="es" content="[Nombre del autor de la presentación aquí]" />
+ <meta name="company" content="[Organización del autor de la presentación aquí]" />
+
+ <link rel="shortcut icon" href="ui/default/pics/favicon.ico" />
+
+ <meta name="generator" content="S5" />
+ <meta name="progid" content="quanta+" />
+ <meta name="version" content="S5 · jEsuSdA · 1.1" />
+ <!--Versión adaptada del estandard S5 1.1 por jEsuSdA-->
+
+ <meta name="robots" content="all" />
+
+ <!-- configuration parameters -->
+ <meta name="defaultView" content="slideshow" />
+ <meta name="controlVis" content="hidden" />
+
+ <!-- style sheet links -->
+ <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
+ <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
+ <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
+ <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
+
+ <!-- S5 JS -->
+ <script src="ui/default/slides.js" type="text/javascript"></script>
+
+</head>
+
+<body>
+
+ <div class="layout">
+ <div id="controls"><!-- NO EDITAR --></div>
+ <div id="currentSlide"><!-- NO EDITAR --></div>
+
+ <div id="header">
+ <div id="logo"><!-- NO EDITAR --></div>
+ </div>
+
+ </div>
+
+ <div id="footer">
+ <h1>[Lugar/Fecha de la presentación aquí]</h1>
+ <h2>[Título de la presentación aquí]</h2>
+ </div>
+
+
+
+
+<div class="presentation">
+
+ <div class="slide">
+ <h1>[Título de la presentación aquí]</h1>
+ <h3>[Nombre del ponente aquí]</h3>
+ <h4>[Datos extra aquí]</h4>
+ </div>
+
+
+ <div class="slide">
+ <h1>[Título de la diapositiva]</h1>
+
+ <ul>
+ <li>[Punto uno]</li>
+ <li>[Punto dos]</li>
+ <li>[Punto tres]</li>
+ <li>[Punto cuatro]</li>
+ <li>[Punto cinco]</li>
+ </ul>
+
+ <div class="handout">
+
+ [Añade aquí cualquier nota o información que desees mostrar en la versión impresa, pero no en la versión en pantalla]
+
+ </div>
+
+ </div>
+ <!--fin slide-->
+
+</div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back-handout-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back-handout-print.png
new file mode 100755
index 000000000..6f68dc67e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back-handout-print.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back-slide-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back-slide-print.png
new file mode 100755
index 000000000..05b3dc503
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back-slide-print.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back_console.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back_console.png
new file mode 100755
index 000000000..8704104dc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back_console.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-foot.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-foot.png
new file mode 100755
index 000000000..c5d1ffc64
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-foot.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-head.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-head.png
new file mode 100755
index 000000000..56dfae9e7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-head.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-head.xcf.7z b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-head.xcf.7z
new file mode 100755
index 000000000..da49c8361
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-head.xcf.7z
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-main.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-main.png
new file mode 100755
index 000000000..835c5edfc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-main.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-main2.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-main2.png
new file mode 100755
index 000000000..1f9702ada
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-main2.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/favicon.ico
new file mode 100755
index 000000000..075faddc7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/favicon.ico
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/logo.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/logo.png
new file mode 100755
index 000000000..1db9ca08f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/logo.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/table-background.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/table-background.png
new file mode 100755
index 000000000..89a7e4fa2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/table-background.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/table-header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/table-header.png
new file mode 100755
index 000000000..d759f1576
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/table-header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pretty.css
new file mode 100755
index 000000000..36bfc0a29
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pretty.css
@@ -0,0 +1,584 @@
+/* Following are the presentation styles -- edit away! */
+
+body
+{
+ background: #fbcd15 url(pics/background-main.png) top left no-repeat;
+ color: #000; font-size: 2em;
+ font-family: Trebuchet MS, Arial, Helvetica, sans-serif;
+/* font-family: Arial, Helvetica, sans-serif; */
+
+}
+
+:link, :visited
+{
+ text-decoration: none;
+ color: #00C;
+}
+
+
+
+h1, h2, h3, h4
+{
+ font-size: 100%;
+ margin: 0;
+ padding: 0;
+ font-weight: inherit;
+}
+
+h1 abbr
+{
+ font-variant: small-caps;
+}
+
+ul, pre
+{
+ margin: 0;
+ line-height: 1em;
+}
+
+html, body
+{
+ margin: 0;
+ padding: 0;
+}
+
+blockquote, q
+{
+ font-style: italic;
+}
+
+blockquote
+{
+ padding: 0 2em 0.5em;
+ margin: 0 1.5em 0.5em;
+ text-align: center;
+ font-size: 1em;
+}
+
+blockquote p
+{
+ margin: 0;
+}
+
+blockquote i
+{
+ font-style: normal;
+}
+
+blockquote b
+{
+ display: block;
+ margin-top: 0.5em;
+ font-weight: normal;
+ font-size: smaller;
+ font-style: normal;
+}
+
+blockquote b i
+{
+ font-style: italic;
+}
+
+kbd
+{
+ font-weight: bold;
+ font-size: 1em;
+}
+
+sup
+{
+ font-size: smaller;
+ line-height: 1px;
+}
+
+
+ul.urls
+{
+ list-style: none;
+ display: inline;
+ margin: 0;
+}
+
+.urls li
+{
+ display: inline;
+ margin: 0;
+}
+
+.notes
+{
+ display: none;
+}
+
+.external
+{
+ border-bottom: 1px dotted gray;
+}
+
+html>body .external
+{
+ border-bottom: none;
+}
+
+.external:after
+{
+ content: " \274F";
+ font-size: smaller;
+ color: #fff;
+}
+
+.incremental, .incremental *, .incremental *:after
+{
+ color: #fff;
+ visibility: visible;
+}
+
+img.incremental
+{
+ visibility: hidden;
+}
+
+.slide .current
+{
+ color: #fff;
+}
+
+
+/* ============== */
+/* === SLIDES === */
+/* ============== */
+
+.slide code
+{
+ padding: 2px 0.25em;
+ font-weight: bold;
+}
+
+.slide code.bad, code del
+{
+ color: red;
+}
+
+.slide code.old
+{
+ color: silver;
+}
+
+.slide pre
+{
+
+ color: #fff;
+ display:block;
+ font-weight:bold;
+ font-family: Arial, Sans-Serif !important;
+ font-size:41.5%;
+ line-height:1.5em;
+ background:#2e3436 url(pics/back_console.png) right bottom no-repeat ;
+ border:3px solid #f19c12;
+ padding:1em 1em 1em 1em;
+
+
+}
+
+.slide pre code
+{
+ font-family: Arial, Sans-Serif !important;
+ display:block;
+ margin:0;
+ padding:0;
+}
+
+
+
+.slide ul
+{
+ margin-left: 5%;
+ margin-right: 7%;
+ list-style: disc;
+}
+
+.slide li
+{
+ margin-top: 0.75em;
+ margin-right: 0;
+}
+
+.slide ul ul
+{
+ line-height: 1;
+}
+
+.slide ul ul li
+{
+ margin: .2em;
+ font-size: 85%;
+ list-style: square;
+}
+
+.slide img.leader
+{
+ display: block;
+ margin: 0 auto;
+}
+
+
+/* ========================= */
+/* === HEADER AND FOOTER === */
+/* ========================= */
+
+div#logo
+{
+ position:absolute;
+ top:0%;
+ right:0%;
+ background:url(pics/logo.png) 50% 50% no-repeat;
+ height:200%;
+ width:150px;
+}
+
+div#header, div#footer
+{
+ background: #a80231;
+ color: #FFF;
+}
+
+
+div#header
+{
+ background:#f19c12 url(pics/background-head.png) bottom left repeat-x;
+ line-height: 1px;
+}
+
+div#footer
+{
+ background:#f19c12 url(pics/background-foot.png) top left repeat-x;
+ font-size: 0.5em;
+ font-weight: bold;
+ padding: 1em 0;
+}
+
+
+
+
+
+#footer h1, #footer h2
+{
+ display: block;
+ padding: 0 1em;
+}
+
+#footer h2
+{
+ font-style: italic;
+}
+
+
+
+/* ============== */
+/* === CLASES === */
+/* ============== */
+
+div.long
+{
+ font-size: 0.75em;
+}
+
+.slide h1
+{
+ position: absolute;
+ top: 0.7em;
+ left: 87px;
+ z-index: 1;
+ margin: 0;
+ padding: 0.3em 0 0 50px;
+ white-space: nowrap;
+ font-weight: bold;
+ font-size: 150%/1em;
+
+ text-transform: capitalize;
+ color: #fff;
+ background: transparent;
+}
+
+.slide h3
+{
+ font-size: 130%;
+}
+
+/* ================ */
+/* === CONTROLS === */
+/* ================ */
+
+
+#currentSlide
+{
+ text-align: center;
+ font-size: 0.6em;
+ font-weight:bold;
+ color: #fff;
+}
+
+#slide0
+{
+ padding-top: 3.5em;
+ font-size: 90%;
+}
+
+#slide0 h1
+{
+ position: static;
+ margin: 1em 0 0;
+ padding: 0;
+/* font: bold 2em Helvetica, sans-serif; */
+ font-weight: bold;
+ font-size:2em;
+ white-space: normal;
+ color: #000;
+ background: transparent;
+}
+
+#slide0 h2
+{
+ font-weight: bold;
+ font-style: italic;
+ font-size: 1em;
+ margin: 0.25em;
+}
+
+#slide0 h3
+{
+ margin-top: 1.5em;
+ font-size: 1.5em;
+}
+
+#slide0 h4
+{
+ margin-top: 0;
+ font-size: 1em;
+}
+
+/* ================ */
+/* === JESUSDA === */
+/* ================ */
+
+.first-pic
+{
+
+ float:right;
+ margin-top:-2em;
+}
+
+/* ================ */
+
+.align-center
+{
+ text-align:center;
+}
+/* ================ */
+
+.float-left , .left-column
+{
+ float:left !important;
+ width:49% !important;
+}
+
+.float-right , .right-column
+{
+ float:right !important;
+ width:49% !important;
+}
+/* ================ */
+.fullscreen
+{
+ z-index:1000 !important;
+ position:fixed !important;
+ top:0;
+ left:0;
+ width:100% !important;
+ height:100% !important;
+
+ background: #fff url(pics/background-main.png) top left no-repeat;
+
+ text-align:center;
+ margin-left:-1.65em;
+
+}
+
+.fullscreen h1
+{
+ display:none;
+}
+
+.rotulo
+{
+ font-size:800%;
+ text-align:center;
+ margin-top:-0.05em;
+
+}
+
+.rotulo2
+{
+ font-size:200%;
+ text-align:center;
+ font-weight:bolder;
+ margin-top:-0.05em;
+
+}
+
+.align-center img
+{
+ margin:auto;
+ text-align:center;
+ margin:0;
+}
+
+/* ========================= */
+/* === TABLAS === */
+/* ========================= */
+
+table
+{
+ background:url(pics/table-background.png) bottom left repeat-x #fff;
+ margin-right:1em;
+ font-size:70%;
+ border:3px solid #f19c12 !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+table td
+{
+ padding:0.5em;
+ font-size:90%;
+ border:1px solid #d2d7cf !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+th
+{
+ background:url(pics/table-header.png) bottom left repeat-x #f19c12;
+ color:#fff;
+}
+
+th a
+{
+ color:#fff !important;
+}
+
+
+
+table caption
+{
+ margin-bottom:1em;
+ margin-top:1em;
+ margin-left:-7em;
+
+
+}
+
+
+display-none
+{
+ display:none;
+}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelbg.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelbg.gif
new file mode 100644
index 000000000..a57ccb106
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelbg.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelheader.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelheader.jpg
new file mode 100644
index 000000000..3c0f13b1e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelheader.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelslide0bg.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelslide0bg.gif
new file mode 100644
index 000000000..fffb08a26
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelslide0bg.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pretty.css
new file mode 100644
index 000000000..1b2107b3f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pretty.css
@@ -0,0 +1,166 @@
+/* Pixel Theme 2004 by Martin Hense ::: www.lounge7.de */
+
+/* Following are the presentation styles -- edit away!
+ Note that the 'body' font size may have to be changed if the resolution is
+ different than expected. */
+
+body {background: transparent url(pixelbg.gif) repeat-y; color: #08093F; font-size: 1.8em;}
+:link, :visited {text-decoration: none;}
+#controls :active {color: #88A !important;}
+#controls :focus {outline: 1px dotted #227;}
+h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;}
+ul, pre {margin: 0; line-height: 1em;}
+html, body {margin: 0; padding: 0;}
+
+blockquote, q {font-style: italic;}
+blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;}
+blockquote p {margin: 0;}
+blockquote i {font-style: normal;}
+blockquote b {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;}
+blockquote b i {font-style: italic;}
+
+kbd {font-weight: bold; font-size: 1em;}
+sup {font-size: smaller; line-height: 1px;}
+
+code {padding: 2px 0.25em; font-weight: bold; color: #533;}
+code.bad, code del {color: red;}
+code.old {color: silver;}
+pre {padding: 0; margin: 0.25em 0 0.5em 0.5em; color: #533; font-size: 90%;}
+pre code {display: block;}
+ul {margin-right: 7%; margin-left: 50px; list-style: square;}
+li {margin-top: 0.75em; margin-right: 0;}
+ul ul {line-height: 1;}
+ul ul li {margin: .2em; font-size: 85%; list-style: square;}
+img.leader {display: block; margin: 0 auto;}
+
+div#header, div#footer {background: #005; color: #646587;
+ font-family: Verdana, Helvetica, sans-serif;}
+div#header {background: transparent url(pixelheader.jpg) 0 0 no-repeat; height: 75px;}
+div#footer {font-size: 0.5em; font-weight: bold; padding: 1em 0; border-top: 1px solid #08093F; background: #fff;}
+#footer h1, #footer h2 {display: block; padding: 0 1em;}
+#footer h2 {font-style: italic;}
+
+div.long {font-size: 0.75em;}
+.slide {font-family: Verdana, Helvetica, Arial, sans-serif;}
+.slide h1 {position: absolute; z-index: 1;
+ margin: 0; padding: 0.3em 0 0 50px; white-space: nowrap;
+ font: bold 150%/1em Helvetica, sans-serif; text-transform: capitalize;
+ top: 1.4em; left: 2%;
+ color: #08093F; background: transparent;}
+.slide h3 {font-size: 130%;}
+h1 abbr {font-variant: small-caps;}
+
+
+#currentSlide {text-align: center; font-size: 0.5em; color: #646587;
+ font-family: Verdana, Helvetica, sans-serif; font-weight: bold;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; white-space: normal;
+ margin: 0; padding: 60px 60px 0 150px; text-align: right;
+ font: bold 2em Helvetica, sans-serif; white-space: normal; height: 281px;
+ color: #fff; background: transparent url(pixelslide0bg.gif) no-repeat;}
+#slide0 h3 {margin-top: 0.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.notes {display: none;}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/LEEME.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/LEEME.txt
new file mode 100755
index 000000000..d09fdc819
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/LEEME.txt
@@ -0,0 +1,31 @@
+QUALITY
+
+Tema para S5, creado originalmente por jEsuSdA 8)
+http://www.jesusda.com
+
+Más temas en: http://www.jesusda.com/projects/presentaciones_s5
+
+
+
+Para customizar este tema modifica el archivo CSS:
+
+s5-ultraviolet/ui/default/pretty.css
+
+
+
+Los archivos gráficos referentes al tema están en la carpeta:
+
+/ui/default/pics
+
+
+Puedes personalizar el favicon copiando el tuyo en la carpeta:
+
+/ui/default/pics
+
+con el nombre favicon.ico
+
+
+
+Para cualquier sugerencia e idea, por favor, contacta conmigo a través de mi web. ;)
+
+--jEsuSdA 8) \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/blank.gif
new file mode 100755
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/iepngfix.htc
new file mode 100755
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/index.html
new file mode 100755
index 000000000..47d9a6b83
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/index.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es-es" >
+
+
+<head>
+
+ <title>[Título de la presentación aquí]</title>
+ <!-- metadata -->
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta http-equiv="content-language" content="es" />
+
+ <!--titulo y datos de publicación de la presentación-->
+
+ <meta name="description" content="[Título de la presentación aquí]" />
+
+ <meta name="keywords" content="[keywords aquí]" />
+ <meta name="presdate" content="[Aquí la fecha de publicación en formato aaaammdd]" />
+
+ <meta name="author" lang="es" content="[Nombre del autor de la presentación aquí]" />
+ <meta name="company" content="[Organización del autor de la presentación aquí]" />
+
+ <link rel="shortcut icon" href="images/favicon.ico" />
+
+ <meta name="generator" content="S5" />
+ <meta name="progid" content="quanta+" />
+ <meta name="version" content="S5 · jEsuSdA · 1.1" />
+ <!--Versión adaptada del estandard S5 1.1 por jEsuSdA-->
+
+ <meta name="robots" content="all" />
+
+ <!-- configuration parameters -->
+ <meta name="defaultView" content="slideshow" />
+ <meta name="controlVis" content="hidden" />
+
+ <!-- style sheet links -->
+ <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
+ <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
+ <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
+ <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
+
+ <!-- S5 JS -->
+ <script src="ui/default/slides.js" type="text/javascript"></script>
+
+</head>
+
+<body>
+
+ <div class="layout">
+ <div id="controls"><!-- NO EDITAR --></div>
+ <div id="currentSlide"><!-- NO EDITAR --></div>
+
+ <div id="header">
+ <div id="logo"><!-- NO EDITAR --></div>
+ </div>
+
+ </div>
+
+ <div id="footer">
+ <h1>[Lugar/Fecha de la presentación aquí]</h1>
+ <h2>[Título de la presentación aquí]</h2>
+ </div>
+
+
+
+
+<div class="presentation">
+
+ <div class="slide">
+ <h1>[Título de la presentación aquí]</h1>
+ <h3>[Nombre del ponente aquí]</h3>
+ <h4>[Datos extra aquí]</h4>
+ </div>
+
+
+ <div class="slide">
+ <h1>[Título de la diapositiva]</h1>
+
+ <ul>
+ <li>[Punto uno]</li>
+ <li>[Punto dos]</li>
+ <li>[Punto tres]</li>
+ <li>[Punto cuatro]</li>
+ <li>[Punto cinco]</li>
+ </ul>
+
+ <div class="handout">
+
+ [Añade aquí cualquier nota o información que desees mostrar en la versión impresa, pero no en la versión en pantalla]
+
+ </div>
+
+ </div>
+ <!--fin slide-->
+
+</div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-handout-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-handout-print.png
new file mode 100755
index 000000000..9e49dd625
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-handout-print.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-index.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-index.png
new file mode 100755
index 000000000..e0c18c4fe
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-index.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-slide-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-slide-print.png
new file mode 100755
index 000000000..e8b5f9d82
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-slide-print.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back_console.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back_console.png
new file mode 100755
index 000000000..ac1708379
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back_console.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-foot.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-foot.png
new file mode 100755
index 000000000..af3be4e6b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-foot.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-head.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-head.png
new file mode 100755
index 000000000..12d6402ee
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-head.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-main.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-main.png
new file mode 100755
index 000000000..3d7595d78
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-main.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/favicon.ico
new file mode 100755
index 000000000..f1cdf0d62
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/favicon.ico
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/logo.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/logo.png
new file mode 100755
index 000000000..dce12c815
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/logo.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/table-background.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/table-background.png
new file mode 100755
index 000000000..89a7e4fa2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/table-background.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/table-header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/table-header.png
new file mode 100755
index 000000000..2f8795842
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/table-header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pretty.css
new file mode 100755
index 000000000..05d30adaf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pretty.css
@@ -0,0 +1,585 @@
+/* Following are the presentation styles -- edit away! */
+
+body
+{
+ background: #FFF url(pics/background-main.png) top left no-repeat;
+ color: #000; font-size: 2em;
+ font-family: Interstate-LightCondensed, Arial, Helvetica, sans-serif;
+/* font-family: Interstate-RegularCondensed, Arial, Helvetica, sans-serif; */
+/* font-family: Arial, Helvetica, sans-serif; */
+
+}
+
+:link, :visited
+{
+ text-decoration: none;
+ color: #00C;
+}
+
+
+
+h1, h2, h3, h4
+{
+ font-size: 100%;
+ margin: 0;
+ padding: 0;
+ font-weight: inherit;
+}
+
+h1 abbr
+{
+ font-variant: small-caps;
+}
+
+ul, pre
+{
+ margin: 0;
+ line-height: 1em;
+}
+
+html, body
+{
+ margin: 0;
+ padding: 0;
+}
+
+blockquote, q
+{
+ font-style: italic;
+}
+
+blockquote
+{
+ padding: 0 2em 0.5em;
+ margin: 0 1.5em 0.5em;
+ text-align: center;
+ font-size: 1em;
+}
+
+blockquote p
+{
+ margin: 0;
+}
+
+blockquote i
+{
+ font-style: normal;
+}
+
+blockquote b
+{
+ display: block;
+ margin-top: 0.5em;
+ font-weight: normal;
+ font-size: smaller;
+ font-style: normal;
+}
+
+blockquote b i
+{
+ font-style: italic;
+}
+
+kbd
+{
+ font-weight: bold;
+ font-size: 1em;
+}
+
+sup
+{
+ font-size: smaller;
+ line-height: 1px;
+}
+
+
+ul.urls
+{
+ list-style: none;
+ display: inline;
+ margin: 0;
+}
+
+.urls li
+{
+ display: inline;
+ margin: 0;
+}
+
+.notes
+{
+ display: none;
+}
+
+.external
+{
+ border-bottom: 1px dotted gray;
+}
+
+html>body .external
+{
+ border-bottom: none;
+}
+
+.external:after
+{
+ content: " \274F";
+ font-size: smaller;
+ color: #fff;
+}
+
+.incremental, .incremental *, .incremental *:after
+{
+/* color: #DDE; */
+ color: #fff;
+ visibility: visible;
+}
+
+img.incremental
+{
+ visibility: hidden;
+}
+
+.slide .current
+{
+ color: #fff;
+}
+
+
+/* ============== */
+/* === SLIDES === */
+/* ============== */
+
+.slide code
+{
+ padding: 2px 0.25em;
+ font-weight: bold;
+}
+
+.slide code.bad, code del
+{
+ color: red;
+}
+
+.slide code.old
+{
+ color: silver;
+}
+
+.slide pre
+{
+
+ color: #ffca00;
+ display:block;
+ font-weight:bold;
+ font-family: Arial, Sans-Serif !important;
+ font-size:41.5%;
+ line-height:1.5em;
+ background:#2e3436 url(pics/back_console.png) right bottom no-repeat ;
+ border:5px solid #ccc;
+ padding:1em 1em 1em 1em;
+
+
+}
+
+.slide pre code
+{
+ font-family: Arial, Sans-Serif !important;
+ display:block;
+ margin:0;
+ padding:0;
+}
+
+
+
+.slide ul
+{
+ margin-left: 5%;
+ margin-right: 7%;
+ list-style: disc;
+}
+
+.slide li
+{
+ margin-top: 0.75em;
+ margin-right: 0;
+}
+
+.slide ul ul
+{
+ line-height: 1;
+}
+
+.slide ul ul li
+{
+ margin: .2em;
+ font-size: 85%;
+ list-style: square;
+}
+
+.slide img.leader
+{
+ display: block;
+ margin: 0 auto;
+}
+
+
+/* ========================= */
+/* === HEADER AND FOOTER === */
+/* ========================= */
+
+div#logo
+{
+ position:absolute;
+ top:0%;
+ right:0%;
+ background:url(pics/logo.png) 50% 50% no-repeat;
+ height:100%;
+ width:50px;
+}
+
+div#header, div#footer
+{
+ background: #a80231;
+ color: #FFF;
+}
+
+
+div#header
+{
+ background:#a80231 url(pics/background-head.png) bottom left repeat-x;
+ line-height: 1px;
+}
+
+div#footer
+{
+ background:#a80231 url(pics/background-foot.png) top left repeat-x;
+ font-size: 0.5em;
+ font-weight: bold;
+ padding: 1em 0;
+}
+
+
+
+
+
+#footer h1, #footer h2
+{
+ display: block;
+ padding: 0 1em;
+}
+
+#footer h2
+{
+ font-style: italic;
+}
+
+
+
+/* ============== */
+/* === CLASES === */
+/* ============== */
+
+div.long
+{
+ font-size: 0.75em;
+}
+
+.slide h1
+{
+ position: absolute;
+ top: 0.7em;
+ left: 87px;
+ z-index: 1;
+ margin: 0;
+ padding: 0.3em 0 0 50px;
+ white-space: nowrap;
+ font-weight: bold;
+ font-size: 150%/1em;
+
+ text-transform: capitalize;
+ color: #fff;
+ background: transparent;
+}
+
+.slide h3
+{
+ font-size: 130%;
+}
+
+/* ================ */
+/* === CONTROLS === */
+/* ================ */
+
+#currentSlide
+{
+ text-align: center;
+ font-size: 0.6em;
+ font-weight:bold;
+ color: #fff;
+}
+
+#slide0
+{
+ padding-top: 3.5em;
+ font-size: 90%;
+}
+
+#slide0 h1
+{
+ position: static;
+ margin: 1em 0 0;
+ padding: 0;
+/* font: bold 2em Helvetica, sans-serif; */
+ font-weight: bold;
+ font-size:2em;
+ white-space: normal;
+ color: #000;
+ background: transparent;
+}
+
+#slide0 h2
+{
+ font-weight: bold;
+ font-style: italic;
+ font-size: 1em;
+ margin: 0.25em;
+}
+
+#slide0 h3
+{
+ margin-top: 1.5em;
+ font-size: 1.5em;
+}
+
+#slide0 h4
+{
+ margin-top: 0;
+ font-size: 1em;
+}
+
+/* ================ */
+/* === JESUSDA === */
+/* ================ */
+
+.first-pic
+{
+
+ float:right;
+ margin-top:-2em;
+}
+
+/* ================ */
+
+.align-center
+{
+ text-align:center;
+}
+/* ================ */
+
+.float-left , .left-column
+{
+ float:left !important;
+ width:49% !important;
+}
+
+.float-right , .right-column
+{
+ float:right !important;
+ width:49% !important;
+}
+/* ================ */
+.fullscreen
+{
+ z-index:1000 !important;
+ position:fixed !important;
+ top:0;
+ left:0;
+ width:100% !important;
+ height:100% !important;
+
+ background: #fff url(pics/background-main.png) top left no-repeat;
+
+ text-align:center;
+ margin-left:-1.65em;
+
+}
+
+.fullscreen h1
+{
+ display:none;
+}
+
+.rotulo
+{
+ font-size:800%;
+ text-align:center;
+ margin-top:-0.05em;
+
+}
+
+.rotulo2
+{
+ font-size:200%;
+ text-align:center;
+ font-weight:bolder;
+ margin-top:-0.05em;
+
+}
+
+.align-center img
+{
+ margin:auto;
+ text-align:center;
+ margin:0;
+}
+
+/* ========================= */
+/* === TABLAS === */
+/* ========================= */
+
+table
+{
+ background:url(pics/table-background.png) bottom left repeat-x #fff;
+ margin-right:1em;
+ font-size:70%;
+ border:1px solid #d2d7cf !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+table td
+{
+ padding:0.5em;
+ font-size:90%;
+ border:1px solid #d2d7cf !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+th
+{
+ background:url(pics/table-header.png) top left repeat-x #a70131;
+ color:#fff;
+}
+
+th a
+{
+ color:#fff !important;
+}
+
+
+
+table caption
+{
+ margin-bottom:1em;
+ margin-top:1em;
+ margin-left:-7em;
+
+
+}
+
+
+display-none
+{
+ display:none;
+}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/s5-notes.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/s5-notes.html
new file mode 100644
index 000000000..902901b1d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/s5-notes.html
@@ -0,0 +1,157 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<!-- Do not edit this document! The system will likely break if you do. -->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Notes</title>
+<style type="text/css" media="all">
+body {
+ margin: 0;
+ padding: 1.0em;
+ background: #333;
+ color: #FFF;
+ font: 2em/1.4em 'Lucida Grande', Verdana, sans-serif;
+}
+div.timers {
+ background: #FFF;
+ color: #333;
+ border: 0.08em solid #222;
+ border-top-width: 1px;
+ border-left-width: 1px;
+ float: left;
+ padding: 0.2em;
+ margin: 0 0 0.5em;
+ position: relative;
+}
+div.timers h1 {
+ text-align: left;
+ font-size: 0.6em;
+ line-height: 1.4em;
+ background-color: #FF9;
+ padding: 0 0.75em;
+ margin: 0.25em 0 0;
+ border: 1px solid #EE8;
+}
+div.timers div.controls {
+ position: absolute;
+ right: 0.25em;
+ top: 0.1em;
+ line-height: 1em;
+}
+div.timers h1 a {
+ text-decoration: none;
+ color: #000;
+}
+div.timers div.controls a {
+ font-size: 0.5em;
+ padding: 0;
+ color: #330;
+}
+div.timers a.control {
+ position: absolute;
+ text-decoration: none;
+ padding: 0 0.25em;
+ color: #AAA;
+ outline: 0;
+}
+a.headctrl {
+ outline: none;
+ text-decoration: none;
+ font-weight: bold;
+}
+#minus {left: 0.25em;}
+#plus {right: 0.25em;}
+.overtime {
+ background: yellow;
+ color: red;
+ border: 3px solid;
+ padding: 0.1em 0.25em;
+ font-weight: bold;
+}
+div.timers h2 {
+ font-size: 0.6em;
+ line-height: 1.0em;
+ font-weight: normal;
+ margin: 0 0 -0.25em;
+ padding-top: 0.5em;
+ color: #666;
+}
+div.timers p {margin: 0; padding: 0 0.5em;}
+div.timers form {margin: 0;}
+div.timers span.clock {font-family: monospace;}
+div.timers ul {margin: 0; padding: 0; list-style: none;}
+div.timers li {float: left; width: 5em; margin: 0; padding: 0 0.5em; text-align: center;}
+div#elapsed {width: 12.1em;}
+div#remaining {clear: left; width: 12.1em;}
+div#remaining p {text-align: center;}
+#slide, #next, #notes, #nextnotes {
+ font-size: 0.75em;
+ line-height: 1.4em;
+ clear: left;
+/* max-width: 30.0em; */
+ text-shadow: 0.1em 0.1em 0.1em #111;
+}
+#next {margin-top: 2.5em;}
+#next, #nextnotes {color: #999; font-size: 0.66em;}
+em.disclaimer {color: #666;}
+div.collapsed h1 {display: block; font-size: 0.33em;}
+div.collapsed h1 a {display: inline;}
+div.collapsed * {display: none;}
+</style>
+<script type="text/javascript">
+// <![CDATA[
+ document.onkeyup = opener.keys;
+ document.onkeypress = opener.trap;
+ document.onclick = opener.clicker;
+// ]]>
+</script>
+</head>
+
+<body onload="opener.s5NotesWindowLoaded=true;" onunload="opener.s5NotesWindowLoaded=false;">
+
+
+<div class="timers" id="elapsed">
+<h1>
+<a href="#" onclick="opener.minimizeTimer('elapsed'); return false;">Elapsed Time</a>
+</h1>
+<ul>
+<li>
+<h2>Presentation</h2>
+<span class="clock" id="elapsed-presentation">00:00:00</span>
+</li>
+<li>
+<h2>Current Slide</h2>
+<span class="clock" id="elapsed-slide">00:00:00</span>
+</li>
+</ul>
+<div class="controls">
+<a href="#reset-elapsed" class="headctrl" onclick="opener.resetElapsedTime(); return false;" title="Reset Elapsed Time">|&lt;</a>
+</div>
+</div>
+
+<div class="timers" id="remaining">
+<h1>
+<a href="#" onclick="opener.minimizeTimer('remaining'); return false;">Remaining Time</a>
+</h1>
+<p>
+<a href="#subtract-remaining" class="control" id="minus" onclick="opener.alterRemainingTime('-5'); return false;" title="Subtract 5 Minutes">-</a>
+<span class="clock" id="timeLeft">00:00:00</span>
+<a href="#add-remaining" class="control" id="plus" onclick="opener.alterRemainingTime('5'); return false;" title="Add 5 Minutes">+</a>
+</p>
+<div class="controls">
+<form action="#" onsubmit="opener.resetRemainingTime(); return false;">
+<input type="text" class="text" id="startFrom" value="0" size="4" maxlength="4" />
+<a href="#toggle-remaining" class="headctrl" onclick="opener.toggleRemainingTime(); return false;" title="Pause/Run Remaining Time">||</a>
+<a href="#reset-remaining" class="headctrl" onclick="opener.resetRemainingTime(); return false;" title="Reset Remaining Time">|&lt;</a>
+</form>
+</div>
+</div>
+
+<h2 id="slide">...</h2>
+<div id="notes"></div>
+
+<h2 id="next">...</h2>
+<div id="nextnotes"></div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.jpg
new file mode 100644
index 000000000..0602a0249
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/blank.gif
new file mode 100755
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/chalks.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/chalks.png
new file mode 100644
index 000000000..5ba8d53db
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/chalks.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.png
new file mode 100644
index 000000000..804e16147
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/framing.css
new file mode 100644
index 000000000..e54061c3e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/framing.css
@@ -0,0 +1,22 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {text-align: right; width: 100%; margin: 0;}
+#currentSlide {position: absolute; width: 12%; left: 44%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/header.png
new file mode 100644
index 000000000..8453dc395
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/iepngfix.htc
new file mode 100755
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/index.html
new file mode 100755
index 000000000..39d8f46ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/index.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es-es" >
+
+
+<head>
+
+ <title>[Título de la presentación aquí]</title>
+ <!-- metadata -->
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta http-equiv="content-language" content="es" />
+
+ <!--titulo y datos de publicación de la presentación-->
+
+ <meta name="description" content="[Título de la presentación aquí]" />
+
+ <meta name="keywords" content="[keywords aquí]" />
+ <meta name="presdate" content="[Aquí la fecha de publicación en formato aaaammdd]" />
+
+ <meta name="author" lang="es" content="[Nombre del autor de la presentación aquí]" />
+ <meta name="company" content="[Organización del autor de la presentación aquí]" />
+
+ <link rel="shortcut icon" href="ui/default/pics/favicon.ico" />
+
+ <meta name="generator" content="S5" />
+ <meta name="progid" content="quanta+" />
+ <meta name="version" content="S5 · jEsuSdA · 1.1" />
+ <!--Versión adaptada del estandard S5 1.1 por jEsuSdA-->
+
+ <meta name="robots" content="all" />
+
+ <!-- configuration parameters -->
+ <meta name="defaultView" content="slideshow" />
+ <meta name="controlVis" content="hidden" />
+
+ <!-- style sheet links -->
+ <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
+ <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
+ <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
+ <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
+
+ <!-- S5 JS -->
+ <script src="ui/default/slides.js" type="text/javascript"></script>
+
+</head>
+
+<body>
+
+ <div class="layout">
+ <div id="controls"><!-- NO EDITAR --></div>
+ <div id="currentSlide"><!-- NO EDITAR --></div>
+
+ <div id="header">
+ <div id="logo"><!-- NO EDITAR --></div>
+ </div>
+
+ </div>
+
+ <div id="footer">
+ <h1>[Lugar/Fecha de la presentación aquí]</h1>
+ <h2>[Título de la presentación aquí]</h2>
+ </div>
+
+
+
+
+<div class="presentation">
+
+ <div class="slide">
+ <h1>[Título de la presentación aquí]</h1>
+ <h3>[Nombre del ponente aquí]</h3>
+ <h4>[Datos extra aquí]</h4>
+ </div>
+
+
+ <div class="slide">
+ <h1>[Título de la diapositiva]</h1>
+
+ <ul>
+ <li>[Punto uno]</li>
+ <li>[Punto dos]</li>
+ <li>[Punto tres]</li>
+ <li>[Punto cuatro]</li>
+ <li>[Punto cinco]</li>
+ </ul>
+
+ <div class="handout">
+
+ [Añade aquí cualquier nota o información que desees mostrar en la versión impresa, pero no en la versión en pantalla]
+
+ </div>
+
+ </div>
+ <!--fin slide-->
+
+</div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/opera.css
new file mode 100644
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/outline.css
new file mode 100644
index 000000000..c04f5006a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/outline.css
@@ -0,0 +1,14 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.hide, .layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #sheet {display: block; visibility: visible; margin: 0; padding: 0;}
+#sheet {float: right; padding: 0.5em;}
+html>body #sheet {position: fixed; top: 0; right: 0;}
+
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em; border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#sheet {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pretty.css
new file mode 100644
index 000000000..41a5f5b3d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pretty.css
@@ -0,0 +1,162 @@
+/* Following are the presentation styles -- edit away! */
+
+body {background: #FFF url(backgrnd.jpg) repeat fixed; color: #cfc; font-family: 'Comic Sans MS', 'Comic Sans', Arial, Helvetica, sans-serif; font-size: 2.25em;}
+a:link, a:visited {text-decoration: none; color: #F93;}
+a:focus, a:hover {color: #f33 !important;}
+
+h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;}
+h1 {text-shadow: 0.1em 0.1em 0.1em #363; background-color: transparent;}
+
+ul, pre {margin: 0; line-height: 1em;}
+html, body {margin: 0; padding: 0;}
+
+blockquote, q {font-style: italic;}
+blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;}
+blockquote p {margin: 0;}
+blockquote i {font-style: normal;}
+blockquote b {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;}
+blockquote b i {font-style: italic;}
+
+img {border: 0; }
+kbd {font-weight: bold; font-size: 1em;}
+sup {font-size: smaller; line-height: 1px;}
+
+.slide code {padding: 2px 0.25em; font-weight: bold; color: #533;}
+.slide code.bad, code del {color: red;}
+.slide code.old {color: silver;}
+.slide pre {padding: 0; margin: 0.25em 0 0.5em 0.5em; color: #533; font-size: 90%;}
+.slide pre code {display: block;}
+.slide ul {margin-left: 5%; margin-right: 7%; list-style: disc;}
+.slide li {margin-top: 0.75em; margin-right: 0;}
+.slide ul ul {line-height: 1;}
+.slide ul ul li {margin: .2em; font-size: 85%; list-style: square;}
+.slide img.leader {display: block; margin: 0 auto;}
+
+div#header, div#footer {background: transparent; color: #AAA; font-family: Verdana, Arial, Helvetica, sans-serif;}
+div#header {background: transparent url(header.png) bottom; line-height: 1px;}
+div#footer {background: transparent url(footer.png) top; color: #fff; font-size: 0.5em; font-weight: bold; padding: 1em 0;}
+#footer h1, #footer h2 {display: block; padding: 0; position:absolute; bottom:0.5em;}
+#footer h1 {left:1em; text-shadow: 0.2em 0.2em #000;}
+#footer h2 {right:1em; text-shadow: 0.2em 0.2em #000; font-style: italic;}
+
+div#logo
+{
+ position:absolute;
+ top:0%;
+ left:0%;
+ background:transparent url(triangle.png) 50% 50% no-repeat;
+ height:456px;
+ width:240px;
+}
+div#logo_bottom
+{
+ position:absolute;
+ bottom:50%;
+ right:0%;
+ background:url(chalks.png) 25% 25% no-repeat;
+ height:20px;
+ width:160px;
+}
+
+div.long {font-size: 0.75em;}
+.slide h1 {position: absolute; top: 0.9em; left: 1.25em; z-index: 1; margin: 0; padding: 0.35em 0 0 50px; white-space: nowrap; font: bold 150%/1em 'Comic Sans MS', 'Comic Sans', Verdana, Arial, Helvetica, sans-serif; text-transform: capitalize; color: #DDD; background-color: transparent;}
+.slide h3 {font-size: 130%;}
+h1 abbr {font-variant: small-caps;}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #ccc;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 3em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #363; white-space: normal; color: #000; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.note {display: none;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #F93;}
+
+.incremental, .incremental *, .incremental *:after {color: #2A5A36; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #0F6;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/print.css
new file mode 100644
index 000000000..5affe5da6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/print.css
@@ -0,0 +1,3 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul, p {page-break-inside: avoid; visibility: visible !important;} h1 {page-break-after: avoid;}
+img {page-break-inside: avoid; page-break-after: avoid;}
+/*.slide {page-break-after: always;}*/ body {font-size: 12pt; background: white;} * {color: black;} #slide0 h1 {font-size: 200%; border: none; margin: 0.5em 0 0.25em;} #slide0 h3 {margin: 0; padding: 0;} #slide0 h4 {margin: 0 0 0.5em; padding: 0;} #slide0 {margin-bottom: 3em;} h1 {border-top: 2pt solid gray; border-bottom: 1px dotted silver;} .extra {background: transparent !important;} div.extra, pre.extra, .example {font-size: 10pt; color: #333;} ul.extra a {font-weight: bold;} p.example {display: none;} #header {display: none;} #footer h1 {margin: 0; border-bottom: 1px solid; color: gray; font-style: italic;} #footer h2, #controls {display: none;} /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .hide, .layout, .layout * {display: none !important;} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/s5-core.css
new file mode 100644
index 000000000..8ed9c1e20
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/s5-core.css
@@ -0,0 +1,8 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer, html>body div#controls, html>body .slide {position: fixed;}
+.handout, .notes, .hide {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.css
new file mode 100644
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/triangle.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/triangle.png
new file mode 100644
index 000000000..79a243385
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/triangle.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/backgrnd.png
new file mode 100644
index 000000000..e28d6f102
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/bank.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/bank.png
new file mode 100644
index 000000000..063973f7f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/bank.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/blank.gif
new file mode 100755
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.png
new file mode 100644
index 000000000..4f3ba14c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/framing.css
new file mode 100644
index 000000000..5f0f5daa4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/framing.css
@@ -0,0 +1,22 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {text-align: right; width: 100%; margin: 0;}
+#currentSlide {position: absolute; width: 14%; left: 43%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/iepngfix.htc
new file mode 100755
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/index.html
new file mode 100755
index 000000000..39d8f46ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/index.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es-es" >
+
+
+<head>
+
+ <title>[Título de la presentación aquí]</title>
+ <!-- metadata -->
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta http-equiv="content-language" content="es" />
+
+ <!--titulo y datos de publicación de la presentación-->
+
+ <meta name="description" content="[Título de la presentación aquí]" />
+
+ <meta name="keywords" content="[keywords aquí]" />
+ <meta name="presdate" content="[Aquí la fecha de publicación en formato aaaammdd]" />
+
+ <meta name="author" lang="es" content="[Nombre del autor de la presentación aquí]" />
+ <meta name="company" content="[Organización del autor de la presentación aquí]" />
+
+ <link rel="shortcut icon" href="ui/default/pics/favicon.ico" />
+
+ <meta name="generator" content="S5" />
+ <meta name="progid" content="quanta+" />
+ <meta name="version" content="S5 · jEsuSdA · 1.1" />
+ <!--Versión adaptada del estandard S5 1.1 por jEsuSdA-->
+
+ <meta name="robots" content="all" />
+
+ <!-- configuration parameters -->
+ <meta name="defaultView" content="slideshow" />
+ <meta name="controlVis" content="hidden" />
+
+ <!-- style sheet links -->
+ <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
+ <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
+ <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
+ <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
+
+ <!-- S5 JS -->
+ <script src="ui/default/slides.js" type="text/javascript"></script>
+
+</head>
+
+<body>
+
+ <div class="layout">
+ <div id="controls"><!-- NO EDITAR --></div>
+ <div id="currentSlide"><!-- NO EDITAR --></div>
+
+ <div id="header">
+ <div id="logo"><!-- NO EDITAR --></div>
+ </div>
+
+ </div>
+
+ <div id="footer">
+ <h1>[Lugar/Fecha de la presentación aquí]</h1>
+ <h2>[Título de la presentación aquí]</h2>
+ </div>
+
+
+
+
+<div class="presentation">
+
+ <div class="slide">
+ <h1>[Título de la presentación aquí]</h1>
+ <h3>[Nombre del ponente aquí]</h3>
+ <h4>[Datos extra aquí]</h4>
+ </div>
+
+
+ <div class="slide">
+ <h1>[Título de la diapositiva]</h1>
+
+ <ul>
+ <li>[Punto uno]</li>
+ <li>[Punto dos]</li>
+ <li>[Punto tres]</li>
+ <li>[Punto cuatro]</li>
+ <li>[Punto cinco]</li>
+ </ul>
+
+ <div class="handout">
+
+ [Añade aquí cualquier nota o información que desees mostrar en la versión impresa, pero no en la versión en pantalla]
+
+ </div>
+
+ </div>
+ <!--fin slide-->
+
+</div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/opera.css
new file mode 100644
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/outline.css
new file mode 100644
index 000000000..c04f5006a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/outline.css
@@ -0,0 +1,14 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.hide, .layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #sheet {display: block; visibility: visible; margin: 0; padding: 0;}
+#sheet {float: right; padding: 0.5em;}
+html>body #sheet {position: fixed; top: 0; right: 0;}
+
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em; border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#sheet {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pattern.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pattern.png
new file mode 100644
index 000000000..6258f024b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pattern.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pretty.css
new file mode 100755
index 000000000..866b03735
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pretty.css
@@ -0,0 +1,163 @@
+/* Following are the presentation styles -- edit away! */
+/* S5 1.3beta7 (29-Mar-2007) advanced version by C. Effenberger */
+
+body {background: #FFF url(backgrnd.png) repeat-x fixed; color: #333; font-family: Georgia, "Times New Roman", Times, serif; font-size: 2.25em;}
+a:link, a:visited {text-decoration: none; color: #F93; text-shadow: 0.1em 0.1em 0.1em #000;}
+a:focus, a:hover {color: #f33 !important;}
+
+h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;}
+h1 {text-shadow: 0.1em 0.1em 0.1em #333; background-color: transparent;}
+
+ul, pre {margin: 0; line-height: 1em;}
+html, body {margin: 0; padding: 0;}
+
+blockquote, q {font-style: italic;}
+blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;}
+blockquote p {margin: 0;}
+blockquote i {font-style: normal;}
+blockquote b {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;}
+blockquote b i {font-style: italic;}
+
+img {border: 0; }
+kbd {font-weight: bold; font-size: 1em;}
+sup {font-size: smaller; line-height: 1px;}
+
+.slide code {padding: 2px 0.25em; font-weight: bold; color: green;}
+.slide code.bad, code del {color: red;}
+.slide code.old {color: silver;}
+.slide pre {padding: 0; margin: 0.25em 0 0.5em 0.5em; color: green; font-size: 90%;}
+.slide pre code {display: block;}
+.slide ul {margin-left: 5%; margin-right: 7%; list-style: disc;}
+.slide li {margin-top: 0.75em; margin-right: 0;}
+.slide ul ul {line-height: 1;}
+.slide ul ul li {margin: .2em; font-size: 85%; list-style: square;}
+.slide img.leader {display: block; margin: 0 auto;}
+
+div#header, div#footer {background: transparent; color: #AAA; font-family: Verdana, Arial, Helvetica, sans-serif;}
+div#header {line-height: 1px;}
+div#footer {background: transparent url(footer.png) top; color: #fff; font-size: 0.5em; font-weight: bold; padding: 1em 0;}
+#footer h1, #footer h2 {display: block; padding: 0; position:absolute; bottom:0.5em;}
+#footer h1 {left:1em; text-shadow: 0.2em 0.2em #000;}
+#footer h2 {right:1em; text-shadow: 0.2em 0.2em #000; font-style: italic;}
+
+div#logo
+{
+ position:absolute;
+ top:0%;
+ left:0%;
+ background:url(sun.png) 50% 50% no-repeat;
+ height:256px;
+ width:256px;
+}
+div#logo_bottom
+{
+ position:absolute;
+ bottom:50%;
+ right:0%;
+ background:url(bank.png) 50% 50% no-repeat;
+ height:205px;
+ width:138px;
+}
+
+div.long {font-size: 0.75em;}
+.slide h1 {position: absolute; top: 0.9em; left: 1.25em; z-index: 1; margin: 0; padding: 0.35em 0 0 50px; white-space: nowrap; font: bold 150%/1em Verdana, Arial, Helvetica, sans-serif; text-transform: capitalize; color: #DDD; background-color: transparent;}
+.slide h3 {font-size: 130%;}
+h1 abbr {font-variant: small-caps;}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: #7BB81B; color: #fff;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 3em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.note {display: none;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #F93;}
+
+.incremental, .incremental *, .incremental *:after {color: #39f; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/print.css
new file mode 100644
index 000000000..5affe5da6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/print.css
@@ -0,0 +1,3 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul, p {page-break-inside: avoid; visibility: visible !important;} h1 {page-break-after: avoid;}
+img {page-break-inside: avoid; page-break-after: avoid;}
+/*.slide {page-break-after: always;}*/ body {font-size: 12pt; background: white;} * {color: black;} #slide0 h1 {font-size: 200%; border: none; margin: 0.5em 0 0.25em;} #slide0 h3 {margin: 0; padding: 0;} #slide0 h4 {margin: 0 0 0.5em; padding: 0;} #slide0 {margin-bottom: 3em;} h1 {border-top: 2pt solid gray; border-bottom: 1px dotted silver;} .extra {background: transparent !important;} div.extra, pre.extra, .example {font-size: 10pt; color: #333;} ul.extra a {font-weight: bold;} p.example {display: none;} #header {display: none;} #footer h1 {margin: 0; border-bottom: 1px solid; color: gray; font-style: italic;} #footer h2, #controls {display: none;} /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .hide, .layout, .layout * {display: none !important;} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/s5-core.css
new file mode 100644
index 000000000..8ed9c1e20
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/s5-core.css
@@ -0,0 +1,8 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer, html>body div#controls, html>body .slide {position: fixed;}
+.handout, .notes, .hide {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.css
new file mode 100644
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/sun.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/sun.png
new file mode 100644
index 000000000..f06b1d393
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/sun.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/LEEME.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/LEEME.txt
new file mode 100755
index 000000000..db32b3854
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/LEEME.txt
@@ -0,0 +1,31 @@
+TANGO
+
+Tema para S5, creado originalmente por jEsuSdA 8)
+http://www.jesusda.com
+
+Más temas en: http://www.jesusda.com/projects/presentaciones_s5
+
+
+
+Para customizar este tema modifica el archivo CSS:
+
+s5-ultraviolet/ui/default/pretty.css
+
+
+
+Los archivos gráficos referentes al tema están en la carpeta:
+
+/ui/default/pics
+
+
+Puedes personalizar el favicon copiando el tuyo en la carpeta:
+
+/ui/default/pics
+
+con el nombre favicon.ico
+
+
+
+Para cualquier sugerencia e idea, por favor, contacta conmigo a través de mi web. ;)
+
+--jEsuSdA 8) \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/blank.gif
new file mode 100755
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/iepngfix.htc
new file mode 100755
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/index.html
new file mode 100755
index 000000000..39d8f46ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/index.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es-es" >
+
+
+<head>
+
+ <title>[Título de la presentación aquí]</title>
+ <!-- metadata -->
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta http-equiv="content-language" content="es" />
+
+ <!--titulo y datos de publicación de la presentación-->
+
+ <meta name="description" content="[Título de la presentación aquí]" />
+
+ <meta name="keywords" content="[keywords aquí]" />
+ <meta name="presdate" content="[Aquí la fecha de publicación en formato aaaammdd]" />
+
+ <meta name="author" lang="es" content="[Nombre del autor de la presentación aquí]" />
+ <meta name="company" content="[Organización del autor de la presentación aquí]" />
+
+ <link rel="shortcut icon" href="ui/default/pics/favicon.ico" />
+
+ <meta name="generator" content="S5" />
+ <meta name="progid" content="quanta+" />
+ <meta name="version" content="S5 · jEsuSdA · 1.1" />
+ <!--Versión adaptada del estandard S5 1.1 por jEsuSdA-->
+
+ <meta name="robots" content="all" />
+
+ <!-- configuration parameters -->
+ <meta name="defaultView" content="slideshow" />
+ <meta name="controlVis" content="hidden" />
+
+ <!-- style sheet links -->
+ <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
+ <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
+ <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
+ <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
+
+ <!-- S5 JS -->
+ <script src="ui/default/slides.js" type="text/javascript"></script>
+
+</head>
+
+<body>
+
+ <div class="layout">
+ <div id="controls"><!-- NO EDITAR --></div>
+ <div id="currentSlide"><!-- NO EDITAR --></div>
+
+ <div id="header">
+ <div id="logo"><!-- NO EDITAR --></div>
+ </div>
+
+ </div>
+
+ <div id="footer">
+ <h1>[Lugar/Fecha de la presentación aquí]</h1>
+ <h2>[Título de la presentación aquí]</h2>
+ </div>
+
+
+
+
+<div class="presentation">
+
+ <div class="slide">
+ <h1>[Título de la presentación aquí]</h1>
+ <h3>[Nombre del ponente aquí]</h3>
+ <h4>[Datos extra aquí]</h4>
+ </div>
+
+
+ <div class="slide">
+ <h1>[Título de la diapositiva]</h1>
+
+ <ul>
+ <li>[Punto uno]</li>
+ <li>[Punto dos]</li>
+ <li>[Punto tres]</li>
+ <li>[Punto cuatro]</li>
+ <li>[Punto cinco]</li>
+ </ul>
+
+ <div class="handout">
+
+ [Añade aquí cualquier nota o información que desees mostrar en la versión impresa, pero no en la versión en pantalla]
+
+ </div>
+
+ </div>
+ <!--fin slide-->
+
+</div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back-handout-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back-handout-print.png
new file mode 100755
index 000000000..9e49dd625
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back-handout-print.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back-slide-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back-slide-print.png
new file mode 100755
index 000000000..e8b5f9d82
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back-slide-print.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back_console.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back_console.png
new file mode 100755
index 000000000..ac1708379
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back_console.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-foot.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-foot.png
new file mode 100755
index 000000000..c44e44f2c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-foot.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-head.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-head.png
new file mode 100755
index 000000000..713900b92
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-head.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-main.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-main.png
new file mode 100755
index 000000000..c7e1d71b7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-main.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/favicon.ico
new file mode 100755
index 000000000..138568ed4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/favicon.ico
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/logo.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/logo.png
new file mode 100755
index 000000000..662b919f1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/logo.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/table-background.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/table-background.png
new file mode 100755
index 000000000..89a7e4fa2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/table-background.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/table-header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/table-header.png
new file mode 100755
index 000000000..4c3a86b44
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/table-header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pretty.css
new file mode 100755
index 000000000..8e807b108
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pretty.css
@@ -0,0 +1,583 @@
+/* Following are the presentation styles -- edit away! */
+
+body
+{
+ background: #FFF url(pics/background-main.png) top left repeat;
+ color: #000; font-size: 2em;
+/* font-family: Trebuchet MS, Arial, Helvetica, sans-serif; */
+ font-family: Arial, Helvetica, sans-serif;
+
+}
+
+:link, :visited
+{
+ text-decoration: none;
+ color: #00C;
+}
+
+
+
+h1, h2, h3, h4
+{
+ font-size: 100%;
+ margin: 0;
+ padding: 0;
+ font-weight: inherit;
+}
+
+h1 abbr
+{
+ font-variant: small-caps;
+}
+
+ul, pre
+{
+ margin: 0;
+ line-height: 1em;
+}
+
+html, body
+{
+ margin: 0;
+ padding: 0;
+}
+
+blockquote, q
+{
+ font-style: italic;
+}
+
+blockquote
+{
+ padding: 0 2em 0.5em;
+ margin: 0 1.5em 0.5em;
+ text-align: center;
+ font-size: 1em;
+}
+
+blockquote p
+{
+ margin: 0;
+}
+
+blockquote i
+{
+ font-style: normal;
+}
+
+blockquote b
+{
+ display: block;
+ margin-top: 0.5em;
+ font-weight: normal;
+ font-size: smaller;
+ font-style: normal;
+}
+
+blockquote b i
+{
+ font-style: italic;
+}
+
+kbd
+{
+ font-weight: bold;
+ font-size: 1em;
+}
+
+sup
+{
+ font-size: smaller;
+ line-height: 1px;
+}
+
+
+ul.urls
+{
+ list-style: none;
+ display: inline;
+ margin: 0;
+}
+
+.urls li
+{
+ display: inline;
+ margin: 0;
+}
+
+.notes
+{
+ display: none;
+}
+
+.external
+{
+ border-bottom: 1px dotted gray;
+}
+
+html>body .external
+{
+ border-bottom: none;
+}
+
+.external:after
+{
+ content: " \274F";
+ font-size: smaller;
+ color: #fff;
+}
+
+.incremental, .incremental *, .incremental *:after
+{
+ color: #fff;
+ visibility: visible;
+}
+
+img.incremental
+{
+ visibility: hidden;
+}
+
+.slide .current
+{
+ color: #fff;
+}
+
+
+/* ============== */
+/* === SLIDES === */
+/* ============== */
+
+.slide code
+{
+ padding: 2px 0.25em;
+ font-weight: bold;
+}
+
+.slide code.bad, code del
+{
+ color: red;
+}
+
+.slide code.old
+{
+ color: silver;
+}
+
+.slide pre
+{
+
+ color: #ffca00;
+ display:block;
+ font-weight:bold;
+ font-family: Arial, Sans-Serif !important;
+ font-size:41.5%;
+ line-height:1.5em;
+ background:#2e3436 url(pics/back_console.png) right bottom no-repeat ;
+ border:5px solid #ccc;
+ padding:1em 1em 1em 1em;
+
+
+}
+
+.slide pre code
+{
+ font-family: Arial, Sans-Serif !important;
+ display:block;
+ margin:0;
+ padding:0;
+}
+
+
+
+.slide ul
+{
+ margin-left: 5%;
+ margin-right: 7%;
+ list-style: disc;
+}
+
+.slide li
+{
+ margin-top: 0.75em;
+ margin-right: 0;
+}
+
+.slide ul ul
+{
+ line-height: 1;
+}
+
+.slide ul ul li
+{
+ margin: .2em;
+ font-size: 85%;
+ list-style: square;
+}
+
+.slide img.leader
+{
+ display: block;
+ margin: 0 auto;
+}
+
+
+/* ========================= */
+/* === HEADER AND FOOTER === */
+/* ========================= */
+
+div#logo
+{
+ position:absolute;
+ top:0%;
+ right:0%;
+ background:url(pics/logo.png) 50% 50% no-repeat;
+ height:200%;
+ width:150px;
+}
+
+div#header, div#footer
+{
+ background: #a80231;
+ color: #FFF;
+}
+
+
+div#header
+{
+ background:#7ea1c9 url(pics/background-head.png) bottom left repeat-x;
+ line-height: 1px;
+}
+
+div#footer
+{
+ background:#7ea1c9 url(pics/background-foot.png) top left repeat-x;
+ font-size: 0.5em;
+ font-weight: bold;
+ padding: 1em 0;
+}
+
+
+
+
+
+#footer h1, #footer h2
+{
+ display: block;
+ padding: 0 1em;
+}
+
+#footer h2
+{
+ font-style: italic;
+}
+
+
+
+/* ============== */
+/* === CLASES === */
+/* ============== */
+
+div.long
+{
+ font-size: 0.75em;
+}
+
+.slide h1
+{
+ position: absolute;
+ top: 0.7em;
+ left: 87px;
+ z-index: 1;
+ margin: 0;
+ padding: 0.3em 0 0 50px;
+ white-space: nowrap;
+ font-weight: bold;
+ font-size: 150%/1em;
+
+ text-transform: capitalize;
+ color: #fff;
+ background: transparent;
+}
+
+.slide h3
+{
+ font-size: 130%;
+}
+
+/* ================ */
+/* === CONTROLS === */
+/* ================ */
+
+#currentSlide
+{
+ text-align: center;
+ font-size: 0.6em;
+ font-weight:bold;
+ color: #fff;
+}
+
+#slide0
+{
+ padding-top: 3.5em;
+ font-size: 90%;
+}
+
+#slide0 h1
+{
+ position: static;
+ margin: 1em 0 0;
+ padding: 0;
+/* font: bold 2em Helvetica, sans-serif; */
+ font-weight: bold;
+ font-size:2em;
+ white-space: normal;
+ color: #000;
+ background: transparent;
+}
+
+#slide0 h2
+{
+ font-weight: bold;
+ font-style: italic;
+ font-size: 1em;
+ margin: 0.25em;
+}
+
+#slide0 h3
+{
+ margin-top: 1.5em;
+ font-size: 1.5em;
+}
+
+#slide0 h4
+{
+ margin-top: 0;
+ font-size: 1em;
+}
+
+/* ================ */
+/* === JESUSDA === */
+/* ================ */
+
+.first-pic
+{
+
+ float:right;
+ margin-top:-2em;
+}
+
+/* ================ */
+
+.align-center
+{
+ text-align:center;
+}
+/* ================ */
+
+.float-left , .left-column
+{
+ float:left !important;
+ width:49% !important;
+}
+
+.float-right , .right-column
+{
+ float:right !important;
+ width:49% !important;
+}
+/* ================ */
+.fullscreen
+{
+ z-index:1000 !important;
+ position:fixed !important;
+ top:0;
+ left:0;
+ width:100% !important;
+ height:100% !important;
+
+ background: #fff url(pics/background-main.png) top left no-repeat;
+
+ text-align:center;
+ margin-left:-1.65em;
+
+}
+
+.fullscreen h1
+{
+ display:none;
+}
+
+.rotulo
+{
+ font-size:800%;
+ text-align:center;
+ margin-top:-0.05em;
+
+}
+
+.rotulo2
+{
+ font-size:200%;
+ text-align:center;
+ font-weight:bolder;
+ margin-top:-0.05em;
+
+}
+
+.align-center img
+{
+ margin:auto;
+ text-align:center;
+ margin:0;
+}
+
+/* ========================= */
+/* === TABLAS === */
+/* ========================= */
+
+table
+{
+ background:url(pics/table-background.png) bottom left repeat-x #fff;
+ margin-right:1em;
+ font-size:70%;
+ border:1px solid #31447b !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+table td
+{
+ padding:0.5em;
+ font-size:90%;
+ border:1px solid #31447b !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+th
+{
+ background:url(pics/table-header.png) top left repeat-x #7ea1c9;
+ color:#fff;
+}
+
+th a
+{
+ color:#fff !important;
+}
+
+
+
+table caption
+{
+ margin-bottom:1em;
+ margin-top:1em;
+ margin-left:-7em;
+
+
+}
+
+
+display-none
+{
+ display:none;
+}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/LEEME.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/LEEME.txt
new file mode 100755
index 000000000..fb08e2004
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/LEEME.txt
@@ -0,0 +1,36 @@
+TANGO-DEVWEB
+
+Tema para S5, creado originalmente por jEsuSdA 8)
+http://www.jesusda.com
+
+Modificaciones a partir del tema TANGO por john Edisson Ortiz Roman (laguaza AT gmail.com)
+
+
+
+
+Más temas en: http://www.jesusda.com/projects/presentaciones_s5
+
+
+
+Para customizar este tema modifica el archivo CSS:
+
+s5-ultraviolet/ui/default/pretty.css
+
+
+
+Los archivos gráficos referentes al tema están en la carpeta:
+
+/ui/default/pics
+
+
+Puedes personalizar el favicon copiando el tuyo en la carpeta:
+
+/ui/default/pics
+
+con el nombre favicon.ico
+
+
+
+Para cualquier sugerencia e idea, por favor, contacta conmigo a través de mi web. ;)
+
+--jEsuSdA 8) \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/blank.gif
new file mode 100755
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/iepngfix.htc
new file mode 100755
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/index.html
new file mode 100755
index 000000000..39d8f46ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/index.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es-es" >
+
+
+<head>
+
+ <title>[Título de la presentación aquí]</title>
+ <!-- metadata -->
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta http-equiv="content-language" content="es" />
+
+ <!--titulo y datos de publicación de la presentación-->
+
+ <meta name="description" content="[Título de la presentación aquí]" />
+
+ <meta name="keywords" content="[keywords aquí]" />
+ <meta name="presdate" content="[Aquí la fecha de publicación en formato aaaammdd]" />
+
+ <meta name="author" lang="es" content="[Nombre del autor de la presentación aquí]" />
+ <meta name="company" content="[Organización del autor de la presentación aquí]" />
+
+ <link rel="shortcut icon" href="ui/default/pics/favicon.ico" />
+
+ <meta name="generator" content="S5" />
+ <meta name="progid" content="quanta+" />
+ <meta name="version" content="S5 · jEsuSdA · 1.1" />
+ <!--Versión adaptada del estandard S5 1.1 por jEsuSdA-->
+
+ <meta name="robots" content="all" />
+
+ <!-- configuration parameters -->
+ <meta name="defaultView" content="slideshow" />
+ <meta name="controlVis" content="hidden" />
+
+ <!-- style sheet links -->
+ <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
+ <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
+ <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
+ <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
+
+ <!-- S5 JS -->
+ <script src="ui/default/slides.js" type="text/javascript"></script>
+
+</head>
+
+<body>
+
+ <div class="layout">
+ <div id="controls"><!-- NO EDITAR --></div>
+ <div id="currentSlide"><!-- NO EDITAR --></div>
+
+ <div id="header">
+ <div id="logo"><!-- NO EDITAR --></div>
+ </div>
+
+ </div>
+
+ <div id="footer">
+ <h1>[Lugar/Fecha de la presentación aquí]</h1>
+ <h2>[Título de la presentación aquí]</h2>
+ </div>
+
+
+
+
+<div class="presentation">
+
+ <div class="slide">
+ <h1>[Título de la presentación aquí]</h1>
+ <h3>[Nombre del ponente aquí]</h3>
+ <h4>[Datos extra aquí]</h4>
+ </div>
+
+
+ <div class="slide">
+ <h1>[Título de la diapositiva]</h1>
+
+ <ul>
+ <li>[Punto uno]</li>
+ <li>[Punto dos]</li>
+ <li>[Punto tres]</li>
+ <li>[Punto cuatro]</li>
+ <li>[Punto cinco]</li>
+ </ul>
+
+ <div class="handout">
+
+ [Añade aquí cualquier nota o información que desees mostrar en la versión impresa, pero no en la versión en pantalla]
+
+ </div>
+
+ </div>
+ <!--fin slide-->
+
+</div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-foot.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-foot.png
new file mode 100755
index 000000000..5b29fb303
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-foot.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-head.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-head.png
new file mode 100755
index 000000000..f36ad1acb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-head.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-main.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-main.png
new file mode 100755
index 000000000..cb5106987
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-main.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/favicon.ico
new file mode 100755
index 000000000..8de7eb42b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/favicon.ico
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/logo.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/logo.png
new file mode 100755
index 000000000..51e5173be
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/logo.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/table-background.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/table-background.png
new file mode 100755
index 000000000..89a7e4fa2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/table-background.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/table-header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/table-header.png
new file mode 100755
index 000000000..4c3a86b44
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/table-header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pretty.css
new file mode 100755
index 000000000..8e807b108
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pretty.css
@@ -0,0 +1,583 @@
+/* Following are the presentation styles -- edit away! */
+
+body
+{
+ background: #FFF url(pics/background-main.png) top left repeat;
+ color: #000; font-size: 2em;
+/* font-family: Trebuchet MS, Arial, Helvetica, sans-serif; */
+ font-family: Arial, Helvetica, sans-serif;
+
+}
+
+:link, :visited
+{
+ text-decoration: none;
+ color: #00C;
+}
+
+
+
+h1, h2, h3, h4
+{
+ font-size: 100%;
+ margin: 0;
+ padding: 0;
+ font-weight: inherit;
+}
+
+h1 abbr
+{
+ font-variant: small-caps;
+}
+
+ul, pre
+{
+ margin: 0;
+ line-height: 1em;
+}
+
+html, body
+{
+ margin: 0;
+ padding: 0;
+}
+
+blockquote, q
+{
+ font-style: italic;
+}
+
+blockquote
+{
+ padding: 0 2em 0.5em;
+ margin: 0 1.5em 0.5em;
+ text-align: center;
+ font-size: 1em;
+}
+
+blockquote p
+{
+ margin: 0;
+}
+
+blockquote i
+{
+ font-style: normal;
+}
+
+blockquote b
+{
+ display: block;
+ margin-top: 0.5em;
+ font-weight: normal;
+ font-size: smaller;
+ font-style: normal;
+}
+
+blockquote b i
+{
+ font-style: italic;
+}
+
+kbd
+{
+ font-weight: bold;
+ font-size: 1em;
+}
+
+sup
+{
+ font-size: smaller;
+ line-height: 1px;
+}
+
+
+ul.urls
+{
+ list-style: none;
+ display: inline;
+ margin: 0;
+}
+
+.urls li
+{
+ display: inline;
+ margin: 0;
+}
+
+.notes
+{
+ display: none;
+}
+
+.external
+{
+ border-bottom: 1px dotted gray;
+}
+
+html>body .external
+{
+ border-bottom: none;
+}
+
+.external:after
+{
+ content: " \274F";
+ font-size: smaller;
+ color: #fff;
+}
+
+.incremental, .incremental *, .incremental *:after
+{
+ color: #fff;
+ visibility: visible;
+}
+
+img.incremental
+{
+ visibility: hidden;
+}
+
+.slide .current
+{
+ color: #fff;
+}
+
+
+/* ============== */
+/* === SLIDES === */
+/* ============== */
+
+.slide code
+{
+ padding: 2px 0.25em;
+ font-weight: bold;
+}
+
+.slide code.bad, code del
+{
+ color: red;
+}
+
+.slide code.old
+{
+ color: silver;
+}
+
+.slide pre
+{
+
+ color: #ffca00;
+ display:block;
+ font-weight:bold;
+ font-family: Arial, Sans-Serif !important;
+ font-size:41.5%;
+ line-height:1.5em;
+ background:#2e3436 url(pics/back_console.png) right bottom no-repeat ;
+ border:5px solid #ccc;
+ padding:1em 1em 1em 1em;
+
+
+}
+
+.slide pre code
+{
+ font-family: Arial, Sans-Serif !important;
+ display:block;
+ margin:0;
+ padding:0;
+}
+
+
+
+.slide ul
+{
+ margin-left: 5%;
+ margin-right: 7%;
+ list-style: disc;
+}
+
+.slide li
+{
+ margin-top: 0.75em;
+ margin-right: 0;
+}
+
+.slide ul ul
+{
+ line-height: 1;
+}
+
+.slide ul ul li
+{
+ margin: .2em;
+ font-size: 85%;
+ list-style: square;
+}
+
+.slide img.leader
+{
+ display: block;
+ margin: 0 auto;
+}
+
+
+/* ========================= */
+/* === HEADER AND FOOTER === */
+/* ========================= */
+
+div#logo
+{
+ position:absolute;
+ top:0%;
+ right:0%;
+ background:url(pics/logo.png) 50% 50% no-repeat;
+ height:200%;
+ width:150px;
+}
+
+div#header, div#footer
+{
+ background: #a80231;
+ color: #FFF;
+}
+
+
+div#header
+{
+ background:#7ea1c9 url(pics/background-head.png) bottom left repeat-x;
+ line-height: 1px;
+}
+
+div#footer
+{
+ background:#7ea1c9 url(pics/background-foot.png) top left repeat-x;
+ font-size: 0.5em;
+ font-weight: bold;
+ padding: 1em 0;
+}
+
+
+
+
+
+#footer h1, #footer h2
+{
+ display: block;
+ padding: 0 1em;
+}
+
+#footer h2
+{
+ font-style: italic;
+}
+
+
+
+/* ============== */
+/* === CLASES === */
+/* ============== */
+
+div.long
+{
+ font-size: 0.75em;
+}
+
+.slide h1
+{
+ position: absolute;
+ top: 0.7em;
+ left: 87px;
+ z-index: 1;
+ margin: 0;
+ padding: 0.3em 0 0 50px;
+ white-space: nowrap;
+ font-weight: bold;
+ font-size: 150%/1em;
+
+ text-transform: capitalize;
+ color: #fff;
+ background: transparent;
+}
+
+.slide h3
+{
+ font-size: 130%;
+}
+
+/* ================ */
+/* === CONTROLS === */
+/* ================ */
+
+#currentSlide
+{
+ text-align: center;
+ font-size: 0.6em;
+ font-weight:bold;
+ color: #fff;
+}
+
+#slide0
+{
+ padding-top: 3.5em;
+ font-size: 90%;
+}
+
+#slide0 h1
+{
+ position: static;
+ margin: 1em 0 0;
+ padding: 0;
+/* font: bold 2em Helvetica, sans-serif; */
+ font-weight: bold;
+ font-size:2em;
+ white-space: normal;
+ color: #000;
+ background: transparent;
+}
+
+#slide0 h2
+{
+ font-weight: bold;
+ font-style: italic;
+ font-size: 1em;
+ margin: 0.25em;
+}
+
+#slide0 h3
+{
+ margin-top: 1.5em;
+ font-size: 1.5em;
+}
+
+#slide0 h4
+{
+ margin-top: 0;
+ font-size: 1em;
+}
+
+/* ================ */
+/* === JESUSDA === */
+/* ================ */
+
+.first-pic
+{
+
+ float:right;
+ margin-top:-2em;
+}
+
+/* ================ */
+
+.align-center
+{
+ text-align:center;
+}
+/* ================ */
+
+.float-left , .left-column
+{
+ float:left !important;
+ width:49% !important;
+}
+
+.float-right , .right-column
+{
+ float:right !important;
+ width:49% !important;
+}
+/* ================ */
+.fullscreen
+{
+ z-index:1000 !important;
+ position:fixed !important;
+ top:0;
+ left:0;
+ width:100% !important;
+ height:100% !important;
+
+ background: #fff url(pics/background-main.png) top left no-repeat;
+
+ text-align:center;
+ margin-left:-1.65em;
+
+}
+
+.fullscreen h1
+{
+ display:none;
+}
+
+.rotulo
+{
+ font-size:800%;
+ text-align:center;
+ margin-top:-0.05em;
+
+}
+
+.rotulo2
+{
+ font-size:200%;
+ text-align:center;
+ font-weight:bolder;
+ margin-top:-0.05em;
+
+}
+
+.align-center img
+{
+ margin:auto;
+ text-align:center;
+ margin:0;
+}
+
+/* ========================= */
+/* === TABLAS === */
+/* ========================= */
+
+table
+{
+ background:url(pics/table-background.png) bottom left repeat-x #fff;
+ margin-right:1em;
+ font-size:70%;
+ border:1px solid #31447b !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+table td
+{
+ padding:0.5em;
+ font-size:90%;
+ border:1px solid #31447b !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+th
+{
+ background:url(pics/table-header.png) top left repeat-x #7ea1c9;
+ color:#fff;
+}
+
+th a
+{
+ color:#fff !important;
+}
+
+
+
+table caption
+{
+ margin-bottom:1em;
+ margin-top:1em;
+ margin-left:-7em;
+
+
+}
+
+
+display-none
+{
+ display:none;
+}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/LEEME.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/LEEME.txt
new file mode 100755
index 000000000..5c00e8abd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/LEEME.txt
@@ -0,0 +1,31 @@
+EXECUTIVE
+
+Tema para S5, creado originalmente por jEsuSdA 8)
+http://www.jesusda.com
+
+Más temas en: http://www.jesusda.com/projects/presentaciones_s5
+
+
+
+Para customizar este tema modifica el archivo CSS:
+
+s5-ultraviolet/ui/default/pretty.css
+
+
+
+Los archivos gráficos referentes al tema están en la carpeta:
+
+/ui/default/pics
+
+
+Puedes personalizar el favicon copiando el tuyo en la carpeta:
+
+/ui/default/pics
+
+con el nombre favicon.ico
+
+
+
+Para cualquier sugerencia e idea, por favor, contacta conmigo a través de mi web. ;)
+
+--jEsuSdA 8) \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/blank.gif
new file mode 100755
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/iepngfix.htc
new file mode 100755
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/index.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/index.php
new file mode 100755
index 000000000..c920d452b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/index.php
@@ -0,0 +1,102 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es-es" >
+
+
+<head>
+
+ <title>[Título de la presentación aquí]</title>
+ <!-- metadata -->
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta http-equiv="content-language" content="es" />
+
+ <!--titulo y datos de publicación de la presentación-->
+
+ <meta name="description" content="[Título de la presentación aquí]" />
+
+ <meta name="keywords" content="[keywords aquí]" />
+ <meta name="presdate" content="[Aquí la fecha de publicación en formato aaaammdd]" />
+
+ <meta name="author" lang="es" content="[Nombre del autor de la presentación aquí]" />
+ <meta name="company" content="[Organización del autor de la presentación aquí]" />
+
+ <link rel="shortcut icon" href="ui/default/pics/favicon.ico" />
+
+ <meta name="generator" content="S5" />
+ <meta name="progid" content="quanta+" />
+ <meta name="version" content="S5 · jEsuSdA · 1.1" />
+ <!--Versión adaptada del estandard S5 1.1 por jEsuSdA-->
+
+ <meta name="robots" content="all" />
+
+ <!-- configuration parameters -->
+ <meta name="defaultView" content="slideshow" />
+ <meta name="controlVis" content="hidden" />
+
+ <!-- style sheet links -->
+ <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
+ <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
+ <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
+ <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
+
+ <!-- S5 JS -->
+ <script src="ui/default/slides.js" type="text/javascript"></script>
+
+</head>
+<?php
+$page_owner = elgg_get_page_owner_entity();
+?>
+<body>
+
+ <div class="layout">
+ <div id="controls"><!-- NO EDITAR --></div>
+ <div id="currentSlide"><!-- NO EDITAR --></div>
+
+ <div id="header">
+ <div id="logo" style="background:url(<?php echo $page_owner->getIcon('medium'); ?>) no-repeat;"><!-- NO EDITAR --></div>
+ </div>
+
+ </div>
+
+ <div id="footer">
+ <h1>[Lugar/Fecha de la presentación aquí]</h1>
+ <h2>[Título de la presentación aquí]</h2>
+ </div>
+
+
+
+
+<div class="presentation">
+
+ <div class="slide">
+ <h1>[Título de la presentación aquí]</h1>
+ <h3>[Nombre del ponente aquí]</h3>
+ <h4>[Datos extra aquí]</h4>
+ </div>
+
+
+ <div class="slide">
+ <h1>[Título de la diapositiva]</h1>
+
+ <ul>
+ <li>[Punto uno]</li>
+ <li>[Punto dos]</li>
+ <li>[Punto tres]</li>
+ <li>[Punto cuatro]</li>
+ <li>[Punto cinco]</li>
+ </ul>
+
+ <div class="handout">
+
+ [Añade aquí cualquier nota o información que desees mostrar en la versión impresa, pero no en la versión en pantalla]
+
+ </div>
+
+ </div>
+ <!--fin slide-->
+
+</div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back-handout-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back-handout-print.png
new file mode 100755
index 000000000..9e49dd625
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back-handout-print.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back-slide-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back-slide-print.png
new file mode 100755
index 000000000..e8b5f9d82
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back-slide-print.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back_console.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back_console.png
new file mode 100755
index 000000000..ac1708379
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back_console.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-foot.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-foot.png
new file mode 100755
index 000000000..811b676bf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-foot.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-head.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-head.png
new file mode 100755
index 000000000..c1df59a15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-head.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-head.xcf b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-head.xcf
new file mode 100755
index 000000000..ff6497417
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-head.xcf
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-main.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-main.png
new file mode 100755
index 000000000..9ed390d97
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-main.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/favicon.ico
new file mode 100755
index 000000000..10ee10936
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/favicon.ico
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/logo.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/logo.jpg
new file mode 100644
index 000000000..923639a20
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/logo.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/table-background.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/table-background.png
new file mode 100755
index 000000000..89a7e4fa2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/table-background.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/table-header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/table-header.png
new file mode 100755
index 000000000..1001624dd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/table-header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pretty.css
new file mode 100755
index 000000000..a4bddd7fb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pretty.css
@@ -0,0 +1,525 @@
+/* Following are the presentation styles -- edit away! */
+
+body
+{
+ background: #FFF url(pics/background-main.png) top left repeat;
+ color: #000; font-size: 2em;
+/* font-family: Trebuchet MS, Arial, Helvetica, sans-serif; */
+ font-family: Arial, Helvetica, sans-serif;
+}
+
+:link, :visited
+{
+ text-decoration: none;
+ color: #00C;
+}
+
+
+
+h1, h2, h3, h4
+{
+ font-size: 100%;
+ margin: 0;
+ padding: 0;
+ font-weight: inherit;
+}
+
+h1 abbr
+{
+ font-variant: small-caps;
+}
+
+ul, pre
+{
+ margin: 0;
+ line-height: 1em;
+}
+
+html, body
+{
+ margin: 0;
+ padding: 0;
+}
+
+blockquote, q
+{
+ font-style: italic;
+}
+
+blockquote
+{
+ padding: 0 2em 0.5em;
+ margin: 0 1.5em 0.5em;
+ text-align: center;
+ font-size: 1em;
+}
+
+blockquote p
+{
+ margin: 0;
+}
+
+blockquote i
+{
+ font-style: normal;
+}
+
+blockquote b
+{
+ display: block;
+ margin-top: 0.5em;
+ font-weight: normal;
+ font-size: smaller;
+ font-style: normal;
+}
+
+blockquote b i
+{
+ font-style: italic;
+}
+
+kbd
+{
+ font-weight: bold;
+ font-size: 1em;
+}
+
+sup
+{
+ font-size: smaller;
+ line-height: 1px;
+}
+
+
+ul.urls
+{
+ list-style: none;
+ display: inline;
+ margin: 0;
+}
+
+.urls li
+{
+ display: inline;
+ margin: 0;
+}
+
+.notes
+{
+ display: none;
+}
+
+.external
+{
+ border-bottom: 1px dotted gray;
+}
+
+html>body .external
+{
+ border-bottom: none;
+}
+
+.external:after
+{
+ content: " \274F";
+ font-size: smaller;
+ color: #fff;
+}
+
+.incremental, .incremental *, .incremental *:after
+{
+ color: #fff;
+ visibility: visible;
+}
+
+img.incremental
+{
+ visibility: hidden;
+}
+
+
+
+/* ============== */
+/* === SLIDES === */
+/* ============== */
+
+.slide code
+{
+ padding: 2px 0.25em;
+ font-weight: bold;
+}
+
+.slide code.bad, code del
+{
+ color: red;
+}
+
+.slide code.old
+{
+ color: silver;
+}
+
+.slide pre
+{
+
+ color: #ffca00;
+ display:block;
+ font-weight:bold;
+ font-family: Arial, Sans-Serif !important;
+ font-size:41.5%;
+ line-height:1.5em;
+ background:#2e3436 url(pics/back_console.png) right bottom no-repeat ;
+ border:5px solid #ccc;
+ padding:1em 1em 1em 1em;
+
+
+}
+
+.slide pre code
+{
+ font-family: Arial, Sans-Serif !important;
+ display:block;
+ margin:0;
+ padding:0;
+}
+
+
+
+.slide ul
+{
+ margin-left: 5%;
+ margin-right: 7%;
+ list-style: disc;
+}
+
+.slide li
+{
+ margin-top: 0.75em;
+ margin-right: 0;
+}
+
+.slide ul ul
+{
+ line-height: 1;
+}
+
+.slide ul ul li
+{
+ margin: .2em;
+ font-size: 85%;
+ list-style: square;
+}
+
+.slide img.leader
+{
+ display: block;
+ margin: 0 auto;
+}
+
+
+/* ========================= */
+/* === HEADER AND FOOTER === */
+/* ========================= */
+
+div#logo
+{
+ position:absolute;
+ top:5%;
+ right:1%;
+ /*background:url(pics/logo.jpg) no-repeat;*/
+ height:96px;
+ width:96px;
+}
+
+div#header, div#footer
+{
+ background: #a80231;
+ color: #FFF;
+}
+
+
+div#header
+{
+ background:#000 url(pics/background-head.png) bottom left repeat-x;
+ line-height: 1px;
+ height: 10%;
+}
+
+#currentSlide {position:absolute; left: 33%; text-align: right; top: 1%; font-size: 0.75em; width: 54%; height:100px; background-color: transparent; color: #999;}
+
+div#footer {background:#000 url(pics/background-foot.png) top left repeat-x; color: #fff; font-size: 0.5em; font-weight: bold; padding: 1em 0; height: 2%;}
+#footer h1, #footer h2, #footer h3 {display: block; padding: 0; position:absolute; bottom:0.7em;}
+#footer h1 {left:1em; text-shadow: 0.2em 0.2em #000;}
+#footer h2 {right:1em; text-shadow: 0.2em 0.2em #000; font-style: italic; visibility: hidden;}
+#footer h3 {right:1em; text-shadow: 0.2em 0.2em #000; font-style: italic; visibility: visible;}
+
+
+/* ============== */
+/* === CLASES === */
+/* ============== */
+
+div.long
+{
+ font-size: 0.75em;
+}
+
+.slide {padding-top: 2em;}
+
+.slide h1
+{
+ position: absolute;
+ top: 0.3em;
+ left: 0px;
+ z-index: 1;
+ margin: 0;
+ padding: 0.3em 0 0 50px;
+ white-space: nowrap;
+ font-weight: bold;
+ font-size: 1.2em;
+
+ text-transform: capitalize;
+ color: #fff;
+ background: transparent;
+}
+
+.slide h3
+{
+ font-size: 130%;
+}
+
+/* ================ */
+/* === CONTROLS === */
+/* ================ */
+
+#controls :active
+{
+ color: #fff !important;
+}
+
+#controls :focus
+{
+ outline: 1px dotted #227;
+}
+
+
+/* ================ */
+/* === JESUSDA === */
+/* ================ */
+
+.first-pic
+{
+
+ float:right;
+ margin-top:-2em;
+}
+
+/* ================ */
+
+.align-center
+{
+ text-align:center;
+}
+/* ================ */
+
+.float-left , .left-column
+{
+ float:left !important;
+ width:49% !important;
+}
+
+.float-right , .right-column
+{
+ float:right !important;
+ width:49% !important;
+}
+/* ================ */
+.fullscreen
+{
+ z-index:1000 !important;
+ position:fixed !important;
+ top:0;
+ left:0;
+ width:100% !important;
+ height:100% !important;
+
+ background: #fff url(pics/background-main.png) top left no-repeat;
+
+ text-align:center;
+ margin-left:-1.65em;
+
+}
+
+.fullscreen h1
+{
+ display:none;
+}
+
+.rotulo
+{
+ font-size:800%;
+ text-align:center;
+ margin-top:-0.05em;
+
+}
+
+.rotulo2
+{
+ font-size:200%;
+ text-align:center;
+ font-weight:bolder;
+ margin-top:-0.05em;
+
+}
+
+.align-center img
+{
+ margin:auto;
+ text-align:center;
+ margin:0;
+}
+
+/* ========================= */
+/* === TABLAS === */
+/* ========================= */
+
+table
+{
+ background:url(pics/table-background.png) bottom left repeat-x #fff;
+ margin-right:1em;
+ font-size:70%;
+ border:1px solid #d2d7cf !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+table td
+{
+ padding:0.5em;
+ font-size:90%;
+ border:1px solid #d2d7cf !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+th
+{
+ background:url(pics/table-header.png) bottom left repeat-x #000;
+ color:#fff;
+}
+
+th a
+{
+ color:#fff !important;
+}
+
+
+
+table caption
+{
+ margin-bottom:1em;
+ margin-top:1em;
+ margin-left:-7em;
+
+
+}
+
+
+display-none
+{
+ display:none;
+}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.js
new file mode 100644
index 000000000..7cb810d51
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.js
@@ -0,0 +1,2846 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+var sectionNames= new Array();
+var sectionTimes= new Array();
+var sectionTitle = "";
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+
+ fd = "";
+ ss = "";
+ at = "";
+ try {
+ for (var dat in sectionNames) {
+ if(dat==snum) sectionTitle = sectionNames[dat];
+ }
+ } catch (exc1) {}
+ try {
+ for (var dat in sectionTimes) {
+ if(dat==snum+1) {
+ playDelay = parseInt(sectionTimes[dat])*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+ }
+ }
+ } catch (exc2) {}
+ var secTitle = sectionTitle;
+ if (secTitle != "") secTitle += "<BR>";
+ cs.innerHTML = secTitle+'<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">' + fd + ss + '<\/span>' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>' +
+ '<span id="csAuto">' + at + '<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/LEEME.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/LEEME.txt
new file mode 100755
index 000000000..4c601efec
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/LEEME.txt
@@ -0,0 +1,32 @@
+ULTRAVIOLET
+
+Tema para S5, creado originalmente por jEsuSdA 8)
+http://www.jesusda.com
+
+Más temas en: http://www.jesusda.com/projects/presentaciones_s5
+
+
+
+Para customizar este tema modifica el archivo CSS:
+
+s5-ultraviolet/ui/default/pretty.css
+
+
+
+Los archivos gráficos referentes al tema están en la carpeta:
+
+s5-ultraviolet/ui/default/pics
+
+
+Puedes personalizar el favicon copiando el tuyo en la carpeta:
+
+s5-ultraviolet/images/
+
+con el nombre favicon.ico
+
+
+Te recomiendo que pongas todas las imágenes que uses en tu presentación dentro de esa misma carpteta.
+
+Para cualquier sugerencia e idea, por favor, contacta conmigo a través de mi web. ;)
+
+--jEsuSdA 8) \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/blank.gif
new file mode 100755
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/iepngfix.htc
new file mode 100755
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/images/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/images/favicon.ico
new file mode 100755
index 000000000..61ab58a16
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/images/favicon.ico
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/index.html
new file mode 100755
index 000000000..ffa2037aa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/index.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es-es" >
+
+
+<head>
+
+ <title>[Título de la presentación aquí]</title>
+ <!-- metadata -->
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta http-equiv="content-language" content="es" />
+
+ <!--titulo y datos de publicación de la presentación-->
+
+ <meta name="description" content="[Título de la presentación aquí]" />
+
+ <meta name="keywords" content="[keywords aquí]" />
+ <meta name="presdate" content="[Aquí la fecha de publicación en formato aaaammdd]" />
+
+ <meta name="author" lang="es" content="[Nombre del autor de la presentación aquí]" />
+ <meta name="company" content="[Organización del autor de la presentación aquí]" />
+
+ <link rel="shortcut icon" href="images/favicon.ico" />
+
+ <meta name="generator" content="S5" />
+ <meta name="progid" content="quanta+" />
+ <meta name="version" content="S5 · jEsuSdA · 1.1" />
+ <!--Versión adaptada del estandard S5 1.1 por jEsuSdA-->
+
+ <meta name="robots" content="all" />
+
+ <!-- configuration parameters -->
+ <meta name="defaultView" content="slideshow" />
+ <meta name="controlVis" content="hidden" />
+
+ <!-- style sheet links -->
+ <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
+ <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
+ <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
+ <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
+
+ <!-- S5 JS -->
+ <script src="ui/default/slides.js" type="text/javascript"></script>
+
+</head>
+
+<body>
+
+ <div class="layout">
+ <div id="controls"><!-- NO EDITAR --></div>
+ <div id="currentSlide"><!-- NO EDITAR --></div>
+
+ <div id="header">
+ <div id="logo"><!-- DO NOT EDIT --></div>
+ </div>
+
+ </div>
+
+ <div id="footer">
+ <h1>[Lugar/Fecha de la presentación aquí]</h1>
+ <h2>[Título de la presentación aquí]</h2>
+ </div>
+
+
+
+
+<div class="presentation">
+
+ <div class="slide">
+ <h1>[Título de la presentación aquí]</h1>
+ <h3>[Nombre del ponente aquí]</h3>
+ <h4>[Datos extra aquí]</h4>
+ </div>
+
+
+ <div class="slide">
+ <h1>[Título de la diapositiva]</h1>
+
+ <ul>
+ <li>[Punto uno]</li>
+ <li>[Punto dos]</li>
+ <li>[Punto tres]</li>
+ <li>[Punto cuatro]</li>
+ <li>[Punto cinco]</li>
+ </ul>
+
+ <div class="handout">
+
+ [Añade aquí cualquier nota o información que desees mostrar en la versión impresa, pero no en la versión en pantalla]
+
+ </div>
+
+ </div>
+ <!--fin slide-->
+
+</div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-foot.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-foot.png
new file mode 100755
index 000000000..a1de38829
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-foot.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-head.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-head.png
new file mode 100755
index 000000000..d64801d93
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-head.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-main.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-main.png
new file mode 100755
index 000000000..7a5ce5971
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-main.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot.png
new file mode 100755
index 000000000..4f466baaf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot2.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot2.png
new file mode 100755
index 000000000..77c1eb9bc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot2.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/h1icon.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/h1icon.png
new file mode 100755
index 000000000..ff68fc4f5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/h1icon.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/link.png
new file mode 100755
index 000000000..c51f5d675
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/logo.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/logo.png
new file mode 100755
index 000000000..0f5e534d5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/logo.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/mail.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/mail.png
new file mode 100755
index 000000000..09f67dbd9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/mail.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pretty.css
new file mode 100755
index 000000000..ac95cf929
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pretty.css
@@ -0,0 +1,543 @@
+/* Following are the presentation styles -- edit away! */
+
+body
+{
+ background: #FFF url(pics/background-main.png) top left no-repeat;
+ color: #000; font-size: 2em;
+ font-family: Trebuchet MS, Arial, Helvetica, sans-serif;
+/* font-family: Arial, Helvetica, sans-serif; */
+
+}
+
+:link, :visited
+{
+ text-decoration: none;
+ color: #00C;
+}
+
+
+
+h1, h2, h3, h4
+{
+ font-size: 100%;
+ margin: 0;
+ padding: 0;
+ font-weight: inherit;
+}
+
+h1 abbr
+{
+ font-variant: small-caps;
+}
+
+ul, pre
+{
+ margin: 0;
+ line-height: 1em;
+}
+
+html, body
+{
+ margin: 0;
+ padding: 0;
+}
+
+blockquote, q
+{
+ font-style: italic;
+}
+
+blockquote
+{
+ padding: 0 2em 0.5em;
+ margin: 0 1.5em 0.5em;
+ text-align: center;
+ font-size: 1em;
+}
+
+blockquote p
+{
+ margin: 0;
+}
+
+blockquote i
+{
+ font-style: normal;
+}
+
+blockquote b
+{
+ display: block;
+ margin-top: 0.5em;
+ font-weight: normal;
+ font-size: smaller;
+ font-style: normal;
+}
+
+blockquote b i
+{
+ font-style: italic;
+}
+
+kbd
+{
+ font-weight: bold;
+ font-size: 1em;
+}
+
+sup
+{
+ font-size: smaller;
+ line-height: 1px;
+}
+
+
+ul.urls
+{
+ list-style: none;
+ display: inline;
+ margin: 0;
+}
+
+.urls li
+{
+ display: inline;
+ margin: 0;
+}
+
+.notes
+{
+ display: none;
+}
+
+.external
+{
+/* border-bottom: 1px dashed #0404cd !important; */
+ border-bottom: 1px dashed #0404cd;
+
+ background:url(pics/link.png) right bottom no-repeat;
+ padding-right:0.5em;
+}
+
+html>body .external
+{
+ border-bottom: none;
+}
+
+.external:after
+{
+
+/* content: " \274F"; */
+ font-size: smaller;
+ color: #8f89c0;
+}
+
+.mail
+{
+ background:url(pics/mail.png) right bottom no-repeat;
+ padding-right:0.8em;
+
+}
+
+.incremental, .incremental * , .incremental *:after
+{
+ color: #fff;
+ visibility: visible;
+ list-style: none !important;
+}
+
+img.incremental
+{
+ visibility: hidden;
+}
+
+.slide .current
+{
+ color: #fff;
+/* visibility: hidden; */
+ /*jesusda añadido */
+}
+
+
+/* ============== */
+/* === SLIDES === */
+/* ============== */
+
+.slide code
+{
+ padding: 2px 0.25em;
+ font-weight: bold;
+ color: #533;
+}
+
+.slide code.bad, code del
+{
+ color: red;
+}
+
+.slide code.old
+{
+ color: silver;
+}
+
+.slide pre
+{
+ padding: 0;
+ margin: 0.25em 0 0.5em 0.5em;
+ color: #533;
+ font-size: 90%;
+}
+
+.slide pre code
+{
+ display: block;
+}
+
+.slide ul
+{
+ margin-left: 5%;
+ margin-right: 7%;
+ margin-top:1em;
+ list-style: disc;
+}
+
+.slide li
+{
+ margin-top: 0.75em;
+ margin-right: 0;
+ list-style-image:url(pics/dot.png);
+}
+
+.slide ul ul
+{
+ line-height: 1.5;
+}
+
+.slide ul ul li
+{
+ margin: .2em;
+ font-size: 85%;
+/* list-style: square; */
+ list-style-image:url(pics/dot2.png);
+
+}
+
+.slide img.leader
+{
+ display: block;
+ margin: 0 auto;
+}
+
+
+/* ========================= */
+/* === HEADER AND FOOTER === */
+/* ========================= */
+
+div#logo
+{
+ position:absolute;
+ top:0%;
+ right:0%;
+ background:url(pics/logo.png) 50% 50% no-repeat;
+ height:250%;
+ width:250px;
+}
+
+div#header, div#footer
+{
+ background: #a80231;
+ color: #FFF;
+}
+
+
+div#header
+{
+ background:#5c3566 url(pics/background-head.png) bottom left repeat-x;
+ line-height: 1px;
+}
+
+div#footer
+{
+ background:#5c3566 url(pics/background-foot.png) top left repeat-x;
+ font-size: 0.5em;
+ font-weight: bold;
+ padding: 1em 0;
+}
+
+
+
+
+
+#footer h1, #footer h2
+{
+ display: block;
+ padding: 0 1em;
+}
+
+#footer h2
+{
+ font-style: italic;
+}
+
+
+
+/* ============== */
+/* === CLASES === */
+/* ============== */
+
+div.long
+{
+ font-size: 0.75em;
+}
+
+.slide h1
+{
+ position: absolute;
+ top: 0.7em;
+ left: 87px;
+ z-index: 1;
+ margin: 0;
+ padding: 0.3em 0 0 50px;
+ white-space: nowrap;
+ font-weight: bold;
+ font-size: 150%/1em;
+
+ text-transform: capitalize;
+ color: #fff;
+
+ background: url(pics/h1icon.png) left bottom no-repeat transparent;
+
+
+}
+
+.slide h2
+{
+ font-size: 130%;
+ color:#5b3566;
+}
+
+
+.slide h3
+{
+ font-size: 130%;
+}
+
+/* ================ */
+/* === CONTROLS === */
+/* ================ */
+
+#currentSlide
+{
+ text-align: center;
+ font-size: 0.6em;
+ font-weight:bold;
+ color: #fff;
+
+}
+
+#slide0
+{
+ padding-top: 3.5em;
+ font-size: 90%;
+}
+
+#slide0 h1
+{
+ position: static;
+ margin: 1em 0 0;
+ padding: 0;
+ /*font: bold 2em Helvetica, sans-serif;*/
+ font-weight: bold;
+ font-size:2em;
+ white-space: normal;
+ color: #000;
+ background: transparent;
+}
+
+#slide0 h2
+{
+ font-weight: bold;
+ font-style: italic;
+ font-size: 1em;
+ margin: 0.25em;
+}
+
+#slide0 h3
+{
+ margin-top: 1.5em;
+ font-size: 1.5em;
+}
+
+#slide0 h4
+{
+ margin-top: 0;
+ font-size: 1em;
+}
+
+/* ================ */
+/* === JESUSDA === */
+/* ================ */
+
+.first-pic
+{
+
+ float:right;
+ margin-top:-2em;
+}
+
+/* ================ */
+
+.align-center
+{
+ text-align:center;
+}
+/* ================ */
+
+.float-left , .left-column
+{
+ float:left !important;
+ width:49% !important;
+}
+
+.float-right , .right-column
+{
+ float:right !important;
+ width:49% !important;
+}
+/* ================ */
+.fullscreen
+{
+ z-index:1000 !important;
+ position:fixed !important;
+ top:0;
+ left:0;
+ width:100% !important;
+ height:100% !important;
+
+ background: #fff url(pics/background-main.png) top left no-repeat;
+
+ text-align:center;
+ margin-left:-1.65em;
+
+}
+
+.fullscreen h1
+{
+ display:none;
+}
+
+.rotulo
+{
+ font-size:800%;
+ text-align:center;
+ margin-top:-0.05em;
+
+}
+
+.align-center img
+{
+ margin:auto;
+ text-align:center;
+}
+
+/* ================ */
+
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/print.css
new file mode 100755
index 000000000..e7a71d145
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul {page-break-inside: avoid; visibility: visible !important;} h1 {page-break-after: avoid;} body {font-size: 12pt; background: white;} * {color: black;} #slide0 h1 {font-size: 200%; border: none; margin: 0.5em 0 0.25em;} #slide0 h3 {margin: 0; padding: 0;} #slide0 h4 {margin: 0 0 0.5em; padding: 0;} #slide0 {margin-bottom: 3em;} h1 {border-top: 2pt solid gray; border-bottom: 1px dotted silver;} .extra {background: transparent !important;} div.extra, pre.extra, .example {font-size: 10pt; color: #333;} ul.extra a {font-weight: bold;} p.example {display: none;} #header {display: none;} #footer h1 {margin: 0; border-bottom: 1px solid; color: gray; font-style: italic;} #footer h2, #controls {display: none;} /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * {display: none !important;} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bkgr.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bkgr.jpg
new file mode 100644
index 000000000..bf03b4ece
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bkgr.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/blank.gif
new file mode 100644
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bodybg.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bodybg.gif
new file mode 100644
index 000000000..5f448a16f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bodybg.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.gif
new file mode 100644
index 000000000..24f086168
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.png
new file mode 100644
index 000000000..4b2864ea2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/framing.css
new file mode 100644
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/iepngfix.htc
new file mode 100644
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/opera.css
new file mode 100644
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/outline.css
new file mode 100644
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pretty.css
new file mode 100644
index 000000000..1fe145578
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pretty.css
@@ -0,0 +1 @@
+/* Following are the presentation styles -- edit away! */ body {background: #F6EAD2 url(bkgr.jpg) left top no-repeat; color: #000; font-size: 2em;} :link, :visited {text-decoration: none; color: #00C;} #controls :active {color: #88A !important;} #controls :focus {outline: 1px dotted #227;} h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;} ul, pre {margin: 0; line-height: 1em;} html, body {margin: 0; padding: 0;} blockquote, q {font-style: italic;} blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;} blockquote p {margin: 0;} blockquote i {font-style: normal;} blockquote b {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;} blockquote b i {font-style: italic;} kbd {font-weight: bold; font-size: 1em;} sup {font-size: smaller; line-height: 1px;} .slide code {padding: 2px 0.25em; font-weight: bold; color: #533;} .slide code.bad, code del {color: red;} .slide code.old {color: silver;} .slide pre {padding: 0; margin: 0.25em 0 0.5em 0.5em; color: #533; font-size: 90%;} .slide pre code {display: block;} .slide ul {margin-left: 5%; margin-right: 7%; list-style: disc;} .slide li {margin-top: 0.75em; margin-right: 0;} .slide ul ul {line-height: 1;} .slide ul ul li {margin: .2em; font-size: 85%; list-style: square;} .slide img.leader {display: block; margin: 0 auto;} div#header, div#footer {background: #000; color: #fdf6e7; font-family: Verdana, Helvetica, sans-serif;} div#header {background: #000 url(buzzsaw.gif) left top no-repeat; line-height: 1px;} div#footer {font-size: 0.5em; font-weight: bold; padding: 1em 0;} #footer h1, #footer h2 {display: block; padding: 0 1em;} #footer h2 {} div.long {font-size: 0.75em;} .slide h1 {position: absolute; top: 0.4em; left: 150px; z-index: 1; margin: 0; padding: 0.3em 0 0 50px; white-space: nowrap; font: bold 150%/1em Helvetica, sans-serif; text-transform: capitalize; color: #DDE; background: #000;} .slide h3 {font-size: 130%;} h1 abbr {font-variant: small-caps;} div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;} html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;} #controls #sheet {display: none;} #controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;} #controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;} #controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;} #controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;} #controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;} #controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;} #controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;} #controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;} #controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;} #controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;} #controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;} #controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;} #controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;} #controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;} #controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;} #controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;} #controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;} #controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;} #controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;} #controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;} #controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;} #controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;} #controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;} #controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;} #controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;} #controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;} #controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;} #controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;} #controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;} #controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;} #controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;} #controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;} #controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;} #controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;} #controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;} #controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;} #controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;} #controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;} #controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;} #jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;} #currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;} #guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;} #guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;} #slide0 {padding-top: 3.5em; font-size: 90%;} #slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;} #slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;} #slide0 h3 {margin-top: 1.5em; font-size: 1.5em;} #slide0 h4 {margin-top: 0; font-size: 1em;} ul.urls {list-style: none; display: inline; margin: 0;} .urls li {display: inline; margin: 0;} .external {border-bottom: 1px dotted gray;} html>body .external {border-bottom: none;} .external:after {content: " \274F"; font-size: smaller; color: #999;} .incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;} img.incremental, canvas.incremental {visibility: hidden;} .slide .current {color: #B02;} /* diagnostics li:after {content: " [" attr(class) "]"; color: #F88;} */ table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; } table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; } table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; } table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; } table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; } table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; } table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; } table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; } #soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;} #soundmanager-debug code {font-size: 11px;} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/print.css
new file mode 100644
index 000000000..e7a71d145
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul {page-break-inside: avoid; visibility: visible !important;} h1 {page-break-after: avoid;} body {font-size: 12pt; background: white;} * {color: black;} #slide0 h1 {font-size: 200%; border: none; margin: 0.5em 0 0.25em;} #slide0 h3 {margin: 0; padding: 0;} #slide0 h4 {margin: 0 0 0.5em; padding: 0;} #slide0 {margin-bottom: 3em;} h1 {border-top: 2pt solid gray; border-bottom: 1px dotted silver;} .extra {background: transparent !important;} div.extra, pre.extra, .example {font-size: 10pt; color: #333;} ul.extra a {font-weight: bold;} p.example {display: none;} #header {display: none;} #footer h1 {margin: 0; border-bottom: 1px solid; color: gray; font-style: italic;} #footer h2, #controls {display: none;} /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * {display: none !important;} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/s5-core.css
new file mode 100644
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.css
new file mode 100644
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/bodybg.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/bodybg.gif
new file mode 100644
index 000000000..941489d40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/bodybg.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/button.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/button.gif
new file mode 100644
index 000000000..af280dea2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/button.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/head.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/head.gif
new file mode 100644
index 000000000..cd6910106
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/head.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pretty.css
new file mode 100644
index 000000000..75f69c3f7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pretty.css
@@ -0,0 +1,221 @@
+/* Following are the presentation styles -- edit away!
+ Note that the 'body' font size may have to be changed if the resolution is
+ different than expected. */
+
+body {background: #f3f3f3 url(bodybg.gif); color: #000; font-size: 2em; font-family: Verdana, Arial, sans-serif;}
+
+a {
+ color: #c30;
+ text-decoration: none;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+:link, :visited {text-decoration: none;}
+#controls :active {color: #333 !important;}
+#controls :focus {outline: none;}
+h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;}
+ul, pre {margin: 0; line-height: 1em;}
+html, body {margin: 0; padding: 0;}
+
+blockquote, q {font-style: italic;}
+blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;}
+blockquote p {margin: 0;}
+blockquote i {font-style: normal;}
+blockquote b {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;}
+blockquote b i {font-style: italic;}
+
+kbd {font-weight: bold; font-size: 1em;}
+sup {font-size: smaller; line-height: 1px;}
+
+code {padding: 2px 0.25em; font-weight: bold; color: #555;}
+code.bad, code del {color: red;}
+code.old {color: silver;}
+pre {font-size: .7em;
+ margin: 0 auto;
+ background-color: #f3f3f3;
+ border: 1px solid #d5d5d5;
+ width: 80%;
+ padding: 20px;}
+pre code {display: block;}
+pre code span {
+ font-weight: normal;
+ font-size: 0.98em;
+}
+ul {margin-left: 85px; margin-right: 3%; list-style: disc; padding: 0;}
+li {margin-top: 5px; margin-right: 0;}
+ul ul {line-height: 1;}
+ul ul li {margin: .2em; font-size: 85%; list-style: square;}
+p, li {
+ line-height: 1.2;
+}
+img.leader {display: block; margin: 0 auto;}
+
+
+div#header, div#footer {color: #AAB;
+ font-family: Verdana, Helvetica, sans-serif;}
+div#header {background: #f3f3f3 url(head.gif) repeat-x top;
+ line-height: 1px;}
+div#footer {font-size: 0.5em; font-weight: bold; padding: 1em 0; color: #666;}
+#footer h1, #footer h2 {display: block; padding: 0 1em;}
+#footer h2 {margin-top: 0.5em;}
+
+div.long {font-size: 0.75em;}
+.slide h1 {position: absolute; top: 0.8em; left: 0; z-index: 1;
+ margin-left: 85px; padding: 0; white-space: nowrap;
+ font-weight: bold; font-size: 150%; line-height: 1;
+ color: #f3f3f3;}
+.slide h3 {font-size: 130%;}
+h1 abbr {font-variant: small-caps;}
+
+#toggle, #prev, #next {
+ display: block;
+ width: 35px; height: 35px;
+ line-height: 35px;
+ float: left;
+ background: url(button.gif) no-repeat 0 0;
+}
+#toggle {
+
+}
+#next {
+ text-align: left;
+}
+
+#currentSlide {text-align: center; font-size: 0.5em; color: #666; font-weight: bold;}
+#currentSlide span {display: none;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 1.33em; padding: 5px 0 5px 20px;
+ font: bold 2.2em Arial, Verdana, sans-serif; white-space: normal;
+ color: #000; background: transparent url(slide0h1.gif) no-repeat left bottom;
+ text-transform: none; }
+#slide0 h3 {margin-top: 0.3em; font-size: 1.2em;}
+#slide0 h4 {margin:0; font-size: 0.9em;}
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.notes {display: none;}
+
+acronym {
+ font-size: 90%;
+}
+
+div.image {
+ margin: 0 auto;
+ text-align: center;
+ background-color: #f3f3f3;
+ border: 1px solid #000;
+ font-size: 0.66%;
+ width: 400px;
+ padding: 20px;
+}
+
+p {
+ margin-left: 85px;
+}
+
+div.image p, #slide0 p {
+ margin-left: 0;
+}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slide0h1.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slide0h1.gif
new file mode 100644
index 000000000..886235eb9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slide0h1.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle.gif
new file mode 100644
index 000000000..1e531e9dd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/syntax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/syntax.php
new file mode 100644
index 000000000..633e001d2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/syntax.php
@@ -0,0 +1,281 @@
+<?php
+/**
+ * Syntax Plugin Prototype
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_INC.'inc/parser/parser.php');
+
+/**
+ * All DokuWiki plugins to extend the parser/rendering mechanism
+ * need to inherit from this class
+ */
+class DokuWiki_Syntax_Plugin extends Doku_Parser_Mode {
+
+ var $allowedModesSetup = false;
+ var $localised = false; // set to true by setupLocale() after loading language dependent strings
+ var $lang = array(); // array to hold language dependent strings, best accessed via ->getLang()
+ var $configloaded = false; // set to true by loadConfig() after loading plugin configuration variables
+ var $conf = array(); // array to hold plugin settings, best accessed via ->getConf()
+
+ /**
+ * General Info
+ *
+ * Needs to return a associative array with the following values:
+ *
+ * author - Author of the plugin
+ * email - Email address to contact the author
+ * date - Last modified date of the plugin in YYYY-MM-DD format
+ * name - Name of the plugin
+ * desc - Short description of the plugin (Text only)
+ * url - Website with more information on the plugin (eg. syntax description)
+ */
+ function getInfo(){
+ $parts = explode('_',get_class($this));
+ $info = DOKU_PLUGIN.'/'.$parts[2].'/plugin.info.txt';
+ if(@file_exists($info)) return confToHash($info);
+ trigger_error('getInfo() not implemented in '.get_class($this).' and '.$info.' not found', E_USER_WARNING);
+ }
+
+ /**
+ * Syntax Type
+ *
+ * Needs to return one of the mode types defined in $PARSER_MODES in parser.php
+ */
+ function getType(){
+ trigger_error('getType() not implemented in '.get_class($this), E_USER_WARNING);
+ }
+
+ /**
+ * Allowed Mode Types
+ *
+ * Defines the mode types for other dokuwiki markup that maybe nested within the
+ * plugin's own markup. Needs to return an array of one or more of the mode types
+ * defined in $PARSER_MODES in parser.php
+ */
+ function getAllowedTypes() {
+ return array();
+ }
+
+ /**
+ * Paragraph Type
+ *
+ * Defines how this syntax is handled regarding paragraphs. This is important
+ * for correct XHTML nesting. Should return one of the following:
+ *
+ * 'normal' - The plugin can be used inside paragraphs
+ * 'block' - Open paragraphs need to be closed before plugin output
+ * 'stack' - Special case. Plugin wraps other paragraphs.
+ *
+ * @see Doku_Handler_Block
+ */
+ function getPType(){
+ return 'normal';
+ }
+
+ /**
+ * Handler to prepare matched data for the rendering process
+ *
+ * This function can only pass data to render() via its return value - render()
+ * may be not be run during the object's current life.
+ *
+ * Usually you should only need the $match param.
+ *
+ * @param $match string The text matched by the patterns
+ * @param $state int The lexer state for the match
+ * @param $pos int The character position of the matched text
+ * @param $handler ref Reference to the Doku_Handler object
+ * @return array Return an array with all data you want to use in render
+ */
+ function handle($match, $state, $pos, &$handler){
+ trigger_error('handle() not implemented in '.get_class($this), E_USER_WARNING);
+ }
+
+ /**
+ * Handles the actual output creation.
+ *
+ * The function must not assume any other of the classes methods have been run
+ * during the object's current life. The only reliable data it receives are its
+ * parameters.
+ *
+ * The function should always check for the given output format and return false
+ * when a format isn't supported.
+ *
+ * $renderer contains a reference to the renderer object which is
+ * currently handling the rendering. You need to use it for writing
+ * the output. How this is done depends on the renderer used (specified
+ * by $format
+ *
+ * The contents of the $data array depends on what the handler() function above
+ * created
+ *
+ * @param $format string output format being rendered
+ * @param $renderer ref reference to the current renderer object
+ * @param $data array data created by handler()
+ * @return boolean rendered correctly?
+ */
+ function render($format, &$renderer, $data) {
+ trigger_error('render() not implemented in '.get_class($this), E_USER_WARNING);
+
+ }
+
+ /**
+ * There should be no need to override these functions
+ */
+ function accepts($mode) {
+
+ if (!$this->allowedModesSetup) {
+ global $PARSER_MODES;
+
+ $allowedModeTypes = $this->getAllowedTypes();
+ foreach($allowedModeTypes as $mt) {
+ $this->allowedModes = array_merge($this->allowedModes, $PARSER_MODES[$mt]);
+ }
+
+ $idx = array_search(substr(get_class($this), 7), (array) $this->allowedModes);
+ if ($idx !== false) {
+ unset($this->allowedModes[$idx]);
+ }
+ $this->allowedModesSetup = true;
+ }
+
+ return parent::accepts($mode);
+ }
+
+ // plugin introspection methods
+ // extract from class name, format = <plugin type>_plugin_<name>[_<component name>]
+ function getPluginType() { list($t) = explode('_', get_class($this), 2); return $t; }
+ function getPluginName() { list($t, $p, $n) = explode('_', get_class($this), 4); return $n; }
+ function getPluginComponent() { list($t, $p, $n, $c) = explode('_', get_class($this), 4); return (isset($c)?$c:''); }
+
+ // localisation methods
+ /**
+ * getLang($id)
+ *
+ * use this function to access plugin language strings
+ * to try to minimise unnecessary loading of the strings when the plugin doesn't require them
+ * e.g. when info plugin is querying plugins for information about themselves.
+ *
+ * @param $id id of the string to be retrieved
+ * @return string string in appropriate language or english if not available
+ */
+ function getLang($id) {
+ if (!$this->localised) $this->setupLocale();
+
+ return (isset($this->lang[$id]) ? $this->lang[$id] : '');
+ }
+
+ /**
+ * locale_xhtml($id)
+ *
+ * retrieve a language dependent wiki page and pass to xhtml renderer for display
+ * plugin equivalent of p_locale_xhtml()
+ *
+ * @param $id id of language dependent wiki page
+ * @return string parsed contents of the wiki page in xhtml format
+ */
+ function locale_xhtml($id) {
+ return p_cached_output($this->localFN($id));
+ }
+
+ /**
+ * localFN($id)
+ * prepends appropriate path for a language dependent filename
+ * plugin equivalent of localFN()
+ */
+ function localFN($id) {
+ global $conf;
+ $plugin = $this->getPluginName();
+ $file = DOKU_PLUGIN.$plugin.'/lang/'.$conf['lang'].'/'.$id.'.txt';
+ if(!@file_exists($file)){
+ //fall back to english
+ $file = DOKU_PLUGIN.$plugin.'/lang/en/'.$id.'.txt';
+ }
+ return $file;
+ }
+
+ /**
+ * setupLocale()
+ * reads all the plugins language dependent strings into $this->lang
+ * this function is automatically called by getLang()
+ */
+ function setupLocale() {
+ if ($this->localised) return;
+
+ global $conf; // definitely don't invoke "global $lang"
+ $path = DOKU_PLUGIN.$this->getPluginName().'/lang/';
+
+ // don't include once, in case several plugin components require the same language file
+ @include($path.'en/lang.php');
+ if ($conf['lang'] != 'en') @include($path.$conf['lang'].'/lang.php');
+
+ $this->lang = $lang;
+ $this->localised = true;
+ }
+
+ // configuration methods
+ /**
+ * getConf($setting)
+ *
+ * use this function to access plugin configuration variables
+ */
+ function getConf($setting){
+
+ if (!$this->configloaded){ $this->loadConfig(); }
+
+ return $this->conf[$setting];
+ }
+
+ /**
+ * loadConfig()
+ * merges the plugin's default settings with any local settings
+ * this function is automatically called through getConf()
+ */
+ function loadConfig(){
+ global $conf;
+
+ $defaults = $this->readDefaultSettings();
+ $plugin = $this->getPluginName();
+
+ foreach ($defaults as $key => $value) {
+ if (isset($conf['plugin'][$plugin][$key])) continue;
+ $conf['plugin'][$plugin][$key] = $value;
+ }
+
+ $this->configloaded = true;
+ $this->conf =& $conf['plugin'][$plugin];
+ }
+
+ /**
+ * read the plugin's default configuration settings from conf/default.php
+ * this function is automatically called through getConf()
+ *
+ * @return array setting => value
+ */
+ function readDefaultSettings() {
+
+ $path = DOKU_PLUGIN.$this->getPluginName().'/conf/';
+ $conf = array();
+
+ if (@file_exists($path.'default.php')) {
+ include($path.'default.php');
+ }
+
+ return $conf;
+ }
+
+ /**
+ * Allow the plugin to prevent DokuWiki creating a second instance of itself
+ *
+ * @return bool true if the plugin can not be instantiated more than once
+ */
+ function isSingleton() {
+ return false;
+ }
+}
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/script.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/script.js
new file mode 100644
index 000000000..96989731c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/script.js
@@ -0,0 +1,207 @@
+// TBT javascript extensions: rgareus 2008
+// TBT javascript prototype: Jaromil 2007
+// reference javascript typewriter documentation: F. Permadi 2002
+// GNU GPL
+
+
+function TBT() {
+ this.setRowCarriageReturn = setRowCarriageReturn;
+ this.setXhtml = setXhtml;
+ this.setSpeed = setSpeed;
+ this.startTyping = startTyping;
+ this.feed = feed;
+ var currentChar;
+ var destination;
+ var cur_x;
+ var cur_y;
+ var row;
+ var col;
+ var text;
+ var render_text;
+ var rowsize;
+ var colsize;
+ var recording;
+ var cr;
+ var cc;
+ var rowcr=0; // config option; do a CR (\r) when moving the cursor up/down
+ var xhtml=0; // html or xhtml
+ var speed=1; // time factor.
+
+ function setSpeed(s) {
+ if (s> 0.01 && s< 20) this.speed=s;
+ else speed=1.0;
+ }
+
+ function setXhtml(onoff) {
+ xhtml=onoff?true:false;
+ }
+
+ function setRowCarriageReturn(onoff) {
+ rowcr=onoff?true:false;
+ }
+
+ function startTyping(destinationParam, tbtrecord) {
+ currentChar = 0;
+ destination = destinationParam;
+ recording = tbtrecord;
+
+ // global text positions
+ row = 0;
+ col = 0;
+ // cursor positions
+ cur_x = 0;
+ cur_y = 0;
+ // length counters
+ rowsize = 0;
+ colsize = 0;
+ cr = 0;
+ cc = 0;
+
+ // text bidimensional array
+ text = new Array();
+ text[0] = new Array();
+ // text render buffer
+ render_text = "";
+
+ setTimeout(this.feed, speed*recording[currentChar][1] );
+ }
+
+ function feed() {
+ var dest = document.getElementById(destination);
+
+ if (dest) {
+ // && dest.innerHTML)
+
+ /* TODO: handle movement keys:
+ KEY_BACKSPACE 275, 127, 272
+ KEY_PAGE_UP 261 ; KEY_PAGE_DOWN 262
+ KEY_HOME 263 ; KEY_DELETE 275
+ port the abstract_console from slw in js
+ */
+
+ // get the next char
+ switch( recording[currentChar][0] ) {
+ case 10: // NEWLINE
+ case 13: // RETURN
+ cur_y++; row++;
+ cur_x = 0; col = 0;
+ if(row >= text.length) {
+ text[row] = new Array();
+ }
+ break;
+
+ case 8: // standard ASCII BACKSPACE
+ case 127: // other low level BACKSPACE codes
+ case 272: // (APPLE BACKSPACE)
+ case 275: // (SOMETIMES!?)
+
+ if(col > 0) // delete if not at the beginning of line
+ text[row].splice(col-1,1);
+
+ if(cur_x > 0) {
+ cur_x--;
+ col--;
+ } else { // backspace at the beginning of a line
+ // move everything up one line
+ // TODO
+ }
+ break;
+
+ case 257: // UP
+ if(row <= 0) break;
+ cur_y--; row--;
+ if (rowcr) { col=0; cur_x=0; }
+ break;
+ case 258: // DOWN
+ if(row >= text.length) break;
+ cur_y++; row++;
+ if (rowcr) { col=0; cur_x=0; }
+ break;
+ case 259: // LEFT
+ if(cur_x <= 0) break;
+ cur_x--;
+ col--;
+ break;
+ case 260: // RIGHT
+ // if(cur_x >= text[row].length) break;
+ cur_x++;
+ col++;
+ break;
+
+ default:
+ if (!text[row]) text[row] = new Array();
+ text[row].splice(col,0,recording[currentChar][0]);
+ cur_x++; col++;
+ break;
+ }
+
+ // RENDER TEXT
+ render_text = "";
+
+ rowsize = text.length;
+ for(cr = 0; cr < rowsize; cr++) {
+
+ colsize = text[cr].length;
+
+ if(cur_y == cr) { // cursor row
+
+ for(cc = 0; cc < colsize; cc++) {
+
+ if(cur_x == cc) { // draw cursor
+ render_text += "<u>";
+ render_text += String.fromCharCode( text[cr][cc] );
+ render_text += "</u>";
+ } else // not yet on cursor
+ render_text += String.fromCharCode( text[cr][cc] );
+
+ }
+
+ // draw cursor at the end of line
+ if(cur_x >= colsize) render_text += "_";
+
+ } else // no need to draw the cursor
+ for(cc = 0; cc < colsize; cc++)
+ render_text += String.fromCharCode( text[cr][cc] );
+
+
+ // newline
+ render_text += xhtml?"<br/>":"<br>";
+ }
+
+ // render_text += String.fromCharCode( recording[currentChar][0] );
+ dest.innerHTML = render_text;
+
+
+
+ // DOM compliant alternative:
+ // var textNode=document.createTextNode(text);
+ // dest.replaceChild(textNode, dest.childNodes[0]);
+
+
+
+ // go to the next entry
+ currentChar++;
+
+
+ if (currentChar >= recording.length) {
+
+ // end of record, restart after 5 seconds
+ currentChar=0;
+ render_text="";
+
+ // clear all text buffer
+ for(cr=0; cr < text.length; cr++)
+ delete text[cr];
+ delete text;
+
+ // end of text
+
+ } else {
+
+ // RECURSION IS TIME -jrml 31jan2007
+ setTimeout(feed, speed*recording[currentChar][1] );
+ }
+ }
+ }
+};
+//Setup VIM: ex: sw=4 ts=8 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/style.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/style.css
new file mode 100644
index 000000000..50c672d78
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/style.css
@@ -0,0 +1,7 @@
+div.dokuwiki div.tbtdest {
+ font-family:monospace;
+}
+div.dokuwiki span.tbtbutton {
+ border-width:2px !important;
+ cursor:pointer;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/syntax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/syntax.php
new file mode 100644
index 000000000..28c4363e8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/syntax.php
@@ -0,0 +1,79 @@
+<?php
+/**
+ * render time based text
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Robin Gareus <robin@gareus.org>
+ */
+
+if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'syntax.php');
+require_once(DOKU_INC.'inc/search.php');
+require_once(DOKU_INC.'inc/JpegMeta.php');
+
+class syntax_plugin_tbt extends DokuWiki_Syntax_Plugin {
+ /**
+ * return some info
+ */
+ function getInfo(){
+ return array(
+ 'author' => 'Robin Gareus',
+ 'email' => 'robin@gareus.org',
+ 'date' => '2008-12-28',
+ 'name' => 'tbt',
+ 'desc' => 'render time based text.',
+ 'url' => 'http://mir.dnsalias.com/wiki/tbt',
+ );
+ }
+
+ function getType(){ return 'substition'; }
+ function getPType(){ return 'block'; }
+ function getSort(){ return 301; }
+
+ /**
+ * Connect pattern to lexer
+ */
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern('\{\{tbt>[^}]*\}\}',$mode,'plugin_tbt');
+ }
+
+
+ /**
+ * Handle the match
+ */
+ function handle($match, $state, $pos, &$handler){
+ $data = array();
+
+ if (!strncasecmp($match,"{{tbt>",6) ) {
+ $match = substr($match,6,-2);
+ }
+ $data['tbt'] = $match;
+ return $data;
+ }
+
+ /**
+ * Create output
+ */
+ function render($mode, &$renderer, $data) {
+ global $myfckinguniqid;
+ if (empty($myfckinguniqid))$myfckinguniqid=1;
+ else $myfckinguniqid++;
+ $uid=$myfckinguniqid;
+
+ if($mode == 'xhtml'){
+ $renderer->doc .= '<span onclick="tbt_'.$uid.'.startTyping(\'textDestination_'.$uid.'\', TimeBasedText_'.$uid.');" class="toc_close tbtbutton">Restart</span><br/><br/>'."\n";
+ $renderer->doc .= '<div id="textDestination_'.$uid.'" class="tbtdest"> </div>';
+ $renderer->doc .= '<script language="JavaScript"><!--'."\n";
+ $renderer->doc .= 'var TimeBasedText_'.$uid.'='.$data['tbt'].";\n\n";
+ $renderer->doc .= 'var tbt_'.$uid.' = new TBT();'."\n";
+ $renderer->doc .= 'tbt_'.$uid.'.setRowCarriageReturn(1);'."\n";
+ $renderer->doc .= 'tbt_'.$uid.'.setXhtml(1);'."\n";
+ $renderer->doc .= 'tbt_'.$uid.'.startTyping("textDestination_'.$uid.'", TimeBasedText_'.$uid.');'."\n";
+ $renderer->doc .= '//--></script>'."\n";
+ return true;
+ }
+ return false;
+ }
+}
+//Setup VIM: ex: et sw=2 ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/admin.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/admin.php
new file mode 100644
index 000000000..da6029bbf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/admin.php
@@ -0,0 +1,627 @@
+<?php
+/*
+ * User Manager
+ *
+ * Dokuwiki Admin Plugin
+ *
+ * This version of the user manager has been modified to only work with
+ * objectified version of auth system
+ *
+ * @author neolao <neolao@neolao.com>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+if(!defined('DOKU_PLUGIN_IMAGES')) define('DOKU_PLUGIN_IMAGES',DOKU_BASE.'lib/plugins/usermanager/images/');
+require_once(DOKU_PLUGIN.'admin.php');
+
+/**
+ * All DokuWiki plugins to extend the admin function
+ * need to inherit from this class
+ */
+class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
+
+ var $_auth = null; // auth object
+ var $_user_total = 0; // number of registered users
+ var $_filter = array(); // user selection filter(s)
+ var $_start = 0; // index of first user to be displayed
+ var $_last = 0; // index of the last user to be displayed
+ var $_pagesize = 20; // number of users to list on one page
+ var $_edit_user = ''; // set to user selected for editing
+ var $_edit_userdata = array();
+ var $_disabled = ''; // if disabled set to explanatory string
+
+ /**
+ * Constructor
+ */
+ function admin_plugin_usermanager(){
+ global $auth;
+
+ $this->setupLocale();
+
+ if (!isset($auth)) {
+ $this->disabled = $this->lang['noauth'];
+ } else if (!$auth->canDo('getUsers')) {
+ $this->disabled = $this->lang['nosupport'];
+ } else {
+
+ // we're good to go
+ $this->_auth = & $auth;
+
+ }
+ }
+
+ /**
+ * return some info
+ */
+ function getInfo(){
+
+ return array(
+ 'author' => 'Chris Smith',
+ 'email' => 'chris@jalakai.co.uk',
+ 'date' => '2008-09-17',
+ 'name' => 'User Manager',
+ 'desc' => 'Manage users '.$this->disabled,
+ 'url' => 'http://dokuwiki.org/plugin:usermanager',
+ );
+ }
+ /**
+ * return prompt for admin menu
+ */
+ function getMenuText($language) {
+
+ if (!is_null($this->_auth))
+ return parent::getMenuText($language);
+
+ return $this->getLang('menu').' '.$this->disabled;
+ }
+
+ /**
+ * return sort order for position in admin menu
+ */
+ function getMenuSort() {
+ return 2;
+ }
+
+ /**
+ * handle user request
+ */
+ function handle() {
+ global $ID;
+
+ if (is_null($this->_auth)) return false;
+
+ // extract the command and any specific parameters
+ // submit button name is of the form - fn[cmd][param(s)]
+ $fn = $_REQUEST['fn'];
+
+ if (is_array($fn)) {
+ $cmd = key($fn);
+ $param = is_array($fn[$cmd]) ? key($fn[$cmd]) : null;
+ } else {
+ $cmd = $fn;
+ $param = null;
+ }
+
+ if ($cmd != "search") {
+ if (!empty($_REQUEST['start']))
+ $this->_start = $_REQUEST['start'];
+ $this->_filter = $this->_retrieveFilter();
+ }
+
+ switch($cmd){
+ case "add" : $this->_addUser(); break;
+ case "delete" : $this->_deleteUser(); break;
+ case "modify" : $this->_modifyUser(); break;
+ case "edit" : $this->_editUser($param); break;
+ case "search" : $this->_setFilter($param);
+ $this->_start = 0;
+ break;
+ }
+
+ $this->_user_total = $this->_auth->canDo('getUserCount') ? $this->_auth->getUserCount($this->_filter) : -1;
+
+ // page handling
+ switch($cmd){
+ case 'start' : $this->_start = 0; break;
+ case 'prev' : $this->_start -= $this->_pagesize; break;
+ case 'next' : $this->_start += $this->_pagesize; break;
+ case 'last' : $this->_start = $this->_user_total; break;
+ }
+ $this->_validatePagination();
+ }
+
+ /**
+ * output appropriate html
+ */
+ function html() {
+ global $ID;
+
+ if(is_null($this->_auth)) {
+ print $this->lang['badauth'];
+ return false;
+ }
+
+ $user_list = $this->_auth->retrieveUsers($this->_start, $this->_pagesize, $this->_filter);
+ $users = array_keys($user_list);
+
+ $page_buttons = $this->_pagination();
+ $delete_disable = $this->_auth->canDo('delUser') ? '' : 'disabled="disabled"';
+
+ $editable = $this->_auth->canDo('UserMod');
+
+ print $this->locale_xhtml('intro');
+ print $this->locale_xhtml('list');
+
+ ptln("<div id=\"user__manager\">");
+ ptln("<div class=\"level2\">");
+
+ if ($this->_user_total > 0) {
+ ptln("<p>".sprintf($this->lang['summary'],$this->_start+1,$this->_last,$this->_user_total,$this->_auth->getUserCount())."</p>");
+ } else {
+ ptln("<p>".sprintf($this->lang['nonefound'],$this->_auth->getUserCount())."</p>");
+ }
+ ptln("<form action=\"".wl($ID)."\" method=\"post\">");
+ formSecurityToken();
+ ptln(" <table class=\"inline\">");
+ ptln(" <thead>");
+ ptln(" <tr>");
+ ptln(" <th>&nbsp;</th><th>".$this->lang["user_id"]."</th><th>".$this->lang["user_name"]."</th><th>".$this->lang["user_mail"]."</th><th>".$this->lang["user_groups"]."</th>");
+ ptln(" </tr>");
+
+ ptln(" <tr>");
+ ptln(" <td class=\"rightalign\"><input type=\"image\" src=\"".DOKU_PLUGIN_IMAGES."search.png\" name=\"fn[search][new]\" title=\"".$this->lang['search_prompt']."\" alt=\"".$this->lang['search']."\" class=\"button\" /></td>");
+ ptln(" <td><input type=\"text\" name=\"userid\" class=\"edit\" value=\"".$this->_htmlFilter('user')."\" /></td>");
+ ptln(" <td><input type=\"text\" name=\"username\" class=\"edit\" value=\"".$this->_htmlFilter('name')."\" /></td>");
+ ptln(" <td><input type=\"text\" name=\"usermail\" class=\"edit\" value=\"".$this->_htmlFilter('mail')."\" /></td>");
+ ptln(" <td><input type=\"text\" name=\"usergroups\" class=\"edit\" value=\"".$this->_htmlFilter('grps')."\" /></td>");
+ ptln(" </tr>");
+ ptln(" </thead>");
+
+ if ($this->_user_total) {
+ ptln(" <tbody>");
+ foreach ($user_list as $user => $userinfo) {
+ extract($userinfo);
+ $groups = join(', ',$grps);
+ ptln(" <tr class=\"user_info\">");
+ ptln(" <td class=\"centeralign\"><input type=\"checkbox\" name=\"delete[".$user."]\" ".$delete_disable." /></td>");
+ if ($editable) {
+ ptln(" <td><a href=\"".wl($ID,array('fn[edit]['.hsc($user).']' => 1,
+ 'do' => 'admin',
+ 'page' => 'usermanager',
+ 'sectok' => getSecurityToken())).
+ "\" title=\"".$this->lang['edit_prompt']."\">".hsc($user)."</a></td>");
+ } else {
+ ptln(" <td>".hsc($user)."</td>");
+ }
+ ptln(" <td>".hsc($name)."</td><td>".hsc($mail)."</td><td>".hsc($groups)."</td>");
+ ptln(" </tr>");
+ }
+ ptln(" </tbody>");
+ }
+
+ ptln(" <tbody>");
+ ptln(" <tr><td colspan=\"5\" class=\"centeralign\">");
+ ptln(" <span class=\"medialeft\">");
+ ptln(" <input type=\"submit\" name=\"fn[delete]\" ".$delete_disable." class=\"button\" value=\"".$this->lang['delete_selected']."\" id=\"usrmgr__del\" />");
+ ptln(" </span>");
+ ptln(" <span class=\"mediaright\">");
+ ptln(" <input type=\"submit\" name=\"fn[start]\" ".$page_buttons['start']." class=\"button\" value=\"".$this->lang['start']."\" />");
+ ptln(" <input type=\"submit\" name=\"fn[prev]\" ".$page_buttons['prev']." class=\"button\" value=\"".$this->lang['prev']."\" />");
+ ptln(" <input type=\"submit\" name=\"fn[next]\" ".$page_buttons['next']." class=\"button\" value=\"".$this->lang['next']."\" />");
+ ptln(" <input type=\"submit\" name=\"fn[last]\" ".$page_buttons['last']." class=\"button\" value=\"".$this->lang['last']."\" />");
+ ptln(" </span>");
+ ptln(" <input type=\"submit\" name=\"fn[search][clear]\" class=\"button\" value=\"".$this->lang['clear']."\" />");
+ ptln(" <input type=\"hidden\" name=\"do\" value=\"admin\" />");
+ ptln(" <input type=\"hidden\" name=\"page\" value=\"usermanager\" />");
+
+ $this->_htmlFilterSettings(2);
+
+ ptln(" </td></tr>");
+ ptln(" </tbody>");
+ ptln(" </table>");
+
+ ptln("</form>");
+ ptln("</div>");
+
+ $style = $this->_edit_user ? " class=\"edit_user\"" : "";
+
+ if ($this->_auth->canDo('addUser')) {
+ ptln("<div".$style.">");
+ print $this->locale_xhtml('add');
+ ptln(" <div class=\"level2\">");
+
+ $this->_htmlUserForm('add',null,array(),4);
+
+ ptln(" </div>");
+ ptln("</div>");
+ }
+
+ if($this->_edit_user && $this->_auth->canDo('UserMod')){
+ ptln("<div".$style." id=\"scroll__here\">");
+ print $this->locale_xhtml('edit');
+ ptln(" <div class=\"level2\">");
+
+ $this->_htmlUserForm('modify',$this->_edit_user,$this->_edit_userdata,4);
+
+ ptln(" </div>");
+ ptln("</div>");
+ }
+ ptln("</div>");
+ }
+
+
+ /**
+ * @todo disable fields which the backend can't change
+ */
+ function _htmlUserForm($cmd,$user='',$userdata=array(),$indent=0) {
+ global $conf;
+ global $ID;
+
+ $name = $mail = $groups = '';
+ $notes = array();
+
+ if ($user) {
+ extract($userdata);
+ if (!empty($grps)) $groups = join(',',$grps);
+ } else {
+ $notes[] = sprintf($this->lang['note_group'],$conf['defaultgroup']);
+ }
+
+ ptln("<form action=\"".wl($ID)."\" method=\"post\">",$indent);
+ formSecurityToken();
+ ptln(" <table class=\"inline\">",$indent);
+ ptln(" <thead>",$indent);
+ ptln(" <tr><th>".$this->lang["field"]."</th><th>".$this->lang["value"]."</th></tr>",$indent);
+ ptln(" </thead>",$indent);
+ ptln(" <tbody>",$indent);
+
+ $this->_htmlInputField($cmd."_userid", "userid", $this->lang["user_id"], $user, $this->_auth->canDo("modLogin"), $indent+6);
+ $this->_htmlInputField($cmd."_userpass", "userpass", $this->lang["user_pass"], "", $this->_auth->canDo("modPass"), $indent+6);
+ $this->_htmlInputField($cmd."_username", "username", $this->lang["user_name"], $name, $this->_auth->canDo("modName"), $indent+6);
+ $this->_htmlInputField($cmd."_usermail", "usermail", $this->lang["user_mail"], $mail, $this->_auth->canDo("modMail"), $indent+6);
+ $this->_htmlInputField($cmd."_usergroups","usergroups",$this->lang["user_groups"],$groups,$this->_auth->canDo("modGroups"),$indent+6);
+
+ if ($this->_auth->canDo("modPass")) {
+ $notes[] = $this->lang['note_pass'];
+ if ($user) {
+ $notes[] = $this->lang['note_notify'];
+ }
+
+ ptln("<tr><td><label for=\"".$cmd."_usernotify\" >".$this->lang["user_notify"].": </label></td><td><input type=\"checkbox\" id=\"".$cmd."_usernotify\" name=\"usernotify\" value=\"1\" /></td></tr>", $indent);
+ }
+
+ ptln(" </tbody>",$indent);
+ ptln(" <tbody>",$indent);
+ ptln(" <tr>",$indent);
+ ptln(" <td colspan=\"2\">",$indent);
+ ptln(" <input type=\"hidden\" name=\"do\" value=\"admin\" />",$indent);
+ ptln(" <input type=\"hidden\" name=\"page\" value=\"usermanager\" />",$indent);
+
+ // save current $user, we need this to access details if the name is changed
+ if ($user)
+ ptln(" <input type=\"hidden\" name=\"userid_old\" value=\"".$user."\" />",$indent);
+
+ $this->_htmlFilterSettings($indent+10);
+
+ ptln(" <input type=\"submit\" name=\"fn[".$cmd."]\" class=\"button\" value=\"".$this->lang[$cmd]."\" />",$indent);
+ ptln(" </td>",$indent);
+ ptln(" </tr>",$indent);
+ ptln(" </tbody>",$indent);
+ ptln(" </table>",$indent);
+
+ foreach ($notes as $note)
+ ptln("<div class=\"fn\">".$note."</div>",$indent);
+
+ ptln("</form>",$indent);
+ }
+
+ function _htmlInputField($id, $name, $label, $value, $cando, $indent=0) {
+ $class = $cando ? '' : ' class="disabled"';
+ $disabled = $cando ? '' : ' disabled="disabled"';
+ echo str_pad('',$indent);
+
+ $fieldtype = ($name == "userpass") ? 'password' : 'text';
+
+ echo "<tr $class>";
+ echo "<td><label for=\"$id\" >$label: </label></td>";
+ echo "<td>";
+ if($cando){
+ echo "<input type=\"$fieldtype\" id=\"$id\" name=\"$name\" value=\"$value\" class=\"edit\" />";
+ }else{
+ echo "<input type=\"hidden\" name=\"$name\" value=\"$value\" />";
+ echo "<input type=\"$fieldtype\" id=\"$id\" name=\"$name\" value=\"$value\" class=\"edit disabled\" disabled=\"disabled\" />";
+ }
+ echo "</td>";
+ echo "</tr>";
+ }
+
+ function _htmlFilter($key) {
+ if (empty($this->_filter)) return '';
+ return (isset($this->_filter[$key]) ? hsc($this->_filter[$key]) : '');
+ }
+
+ function _htmlFilterSettings($indent=0) {
+
+ ptln("<input type=\"hidden\" name=\"start\" value=\"".$this->_start."\" />",$indent);
+
+ foreach ($this->_filter as $key => $filter) {
+ ptln("<input type=\"hidden\" name=\"filter[".$key."]\" value=\"".hsc($filter)."\" />",$indent);
+ }
+ }
+
+ function _addUser(){
+ if (!checkSecurityToken()) return false;
+ if (!$this->_auth->canDo('addUser')) return false;
+
+ list($user,$pass,$name,$mail,$grps) = $this->_retrieveUser();
+ if (empty($user)) return false;
+
+ if ($this->_auth->canDo('modPass')){
+ if (empty($pass)){
+ if(!empty($_REQUEST['usernotify'])){
+ $pass = auth_pwgen();
+ } else {
+ msg($this->lang['add_fail'], -1);
+ return false;
+ }
+ }
+ } else {
+ if (!empty($pass)){
+ msg($this->lang['add_fail'], -1);
+ return false;
+ }
+ }
+
+ if ($this->_auth->canDo('modName')){
+ if (empty($name)){
+ msg($this->lang['add_fail'], -1);
+ return false;
+ }
+ } else {
+ if (!empty($name)){
+ return false;
+ }
+ }
+
+ if ($this->_auth->canDo('modMail')){
+ if (empty($mail)){
+ msg($this->lang['add_fail'], -1);
+ return false;
+ }
+ } else {
+ if (!empty($mail)){
+ return false;
+ }
+ }
+
+ if ($ok = $this->_auth->triggerUserMod('create', array($user,$pass,$name,$mail,$grps))) {
+
+ msg($this->lang['add_ok'], 1);
+
+ if (!empty($_REQUEST['usernotify']) && $pass) {
+ $this->_notifyUser($user,$pass);
+ }
+ } else {
+ msg($this->lang['add_fail'], -1);
+ }
+
+ return $ok;
+ }
+
+ /**
+ * Delete user
+ */
+ function _deleteUser(){
+ global $conf;
+
+ if (!checkSecurityToken()) return false;
+ if (!$this->_auth->canDo('delUser')) return false;
+
+ $selected = $_REQUEST['delete'];
+ if (!is_array($selected) || empty($selected)) return false;
+ $selected = array_keys($selected);
+
+ if(in_array($_SERVER['REMOTE_USER'], $selected)) {
+ msg("You can't delete yourself!", -1);
+ return false;
+ }
+
+ $count = $this->_auth->triggerUserMod('delete', array($selected));
+ if ($count == count($selected)) {
+ $text = str_replace('%d', $count, $this->lang['delete_ok']);
+ msg("$text.", 1);
+ } else {
+ $part1 = str_replace('%d', $count, $this->lang['delete_ok']);
+ $part2 = str_replace('%d', (count($selected)-$count), $this->lang['delete_fail']);
+ msg("$part1, $part2",-1);
+ }
+
+ // invalidate all sessions
+ io_saveFile($conf['cachedir'].'/sessionpurge',time());
+
+ return true;
+ }
+
+ /**
+ * Edit user (a user has been selected for editing)
+ */
+ function _editUser($param) {
+ if (!checkSecurityToken()) return false;
+ if (!$this->_auth->canDo('UserMod')) return false;
+
+ $user = cleanID(preg_replace('/.*:/','',$param));
+ $userdata = $this->_auth->getUserData($user);
+
+ // no user found?
+ if (!$userdata) {
+ msg($this->lang['edit_usermissing'],-1);
+ return false;
+ }
+
+ $this->_edit_user = $user;
+ $this->_edit_userdata = $userdata;
+
+ return true;
+ }
+
+ /**
+ * Modify user (modified user data has been recieved)
+ */
+ function _modifyUser(){
+ global $conf;
+
+ if (!checkSecurityToken()) return false;
+ if (!$this->_auth->canDo('UserMod')) return false;
+
+ // get currently valid user data
+ $olduser = cleanID(preg_replace('/.*:/','',$_REQUEST['userid_old']));
+ $oldinfo = $this->_auth->getUserData($olduser);
+
+ // get new user data subject to change
+ list($newuser,$newpass,$newname,$newmail,$newgrps) = $this->_retrieveUser();
+ if (empty($newuser)) return false;
+
+ $changes = array();
+ if ($newuser != $olduser) {
+
+ if (!$this->_auth->canDo('modLogin')) { // sanity check, shouldn't be possible
+ msg($this->lang['update_fail'],-1);
+ return false;
+ }
+
+ // check if $newuser already exists
+ if ($this->_auth->getUserData($newuser)) {
+ msg(sprintf($this->lang['update_exists'],$newuser),-1);
+ $re_edit = true;
+ } else {
+ $changes['user'] = $newuser;
+ }
+ }
+
+ if (!empty($newpass) && $this->_auth->canDo('modPass'))
+ $changes['pass'] = $newpass;
+ if (!empty($newname) && $this->_auth->canDo('modName') && $newname != $oldinfo['name'])
+ $changes['name'] = $newname;
+ if (!empty($newmail) && $this->_auth->canDo('modMail') && $newmail != $oldinfo['mail'])
+ $changes['mail'] = $newmail;
+ if (!empty($newgrps) && $this->_auth->canDo('modGroups') && $newgrps != $oldinfo['grps'])
+ $changes['grps'] = $newgrps;
+
+ if ($ok = $this->_auth->triggerUserMod('modify', array($olduser, $changes))) {
+ msg($this->lang['update_ok'],1);
+
+ if (!empty($_REQUEST['usernotify']) && $newpass) {
+ $notify = empty($changes['user']) ? $olduser : $newuser;
+ $this->_notifyUser($notify,$newpass);
+ }
+
+ // invalidate all sessions
+ io_saveFile($conf['cachedir'].'/sessionpurge',time());
+
+ } else {
+ msg($this->lang['update_fail'],-1);
+ }
+
+ if (!empty($re_edit)) {
+ $this->_editUser($olduser);
+ }
+
+ return $ok;
+ }
+
+ /**
+ * send password change notification email
+ */
+ function _notifyUser($user, $password) {
+
+ if ($sent = auth_sendPassword($user,$password)) {
+ msg($this->lang['notify_ok'], 1);
+ } else {
+ msg($this->lang['notify_fail'], -1);
+ }
+
+ return $sent;
+ }
+
+ /**
+ * retrieve & clean user data from the form
+ *
+ * @return array(user, password, full name, email, array(groups))
+ */
+ function _retrieveUser($clean=true) {
+
+ $user[0] = ($clean) ? cleanID(preg_replace('/.*:/','',$_REQUEST['userid'])) : $_REQUEST['userid'];
+ $user[1] = $_REQUEST['userpass'];
+ $user[2] = $_REQUEST['username'];
+ $user[3] = $_REQUEST['usermail'];
+ $user[4] = preg_split('/\s*,\s*/',$_REQUEST['usergroups'],-1,PREG_SPLIT_NO_EMPTY);
+
+ if (empty($user[4]) || (is_array($user[4]) && (count($user[4]) == 1) && (trim($user[4][0]) == ''))) {
+ $user[4] = null;
+ }
+
+ return $user;
+ }
+
+ function _setFilter($op) {
+
+ $this->_filter = array();
+
+ if ($op == 'new') {
+ list($user,$pass,$name,$mail,$grps) = $this->_retrieveUser(false);
+
+ if (!empty($user)) $this->_filter['user'] = $user;
+ if (!empty($name)) $this->_filter['name'] = $name;
+ if (!empty($mail)) $this->_filter['mail'] = $mail;
+ if (!empty($grps)) $this->_filter['grps'] = join('|',$grps);
+ }
+ }
+
+ function _retrieveFilter() {
+
+ $t_filter = $_REQUEST['filter'];
+ if (!is_array($t_filter)) return array();
+
+ // messy, but this way we ensure we aren't getting any additional crap from malicious users
+ $filter = array();
+
+ if (isset($t_filter['user'])) $filter['user'] = $t_filter['user'];
+ if (isset($t_filter['name'])) $filter['name'] = $t_filter['name'];
+ if (isset($t_filter['mail'])) $filter['mail'] = $t_filter['mail'];
+ if (isset($t_filter['grps'])) $filter['grps'] = $t_filter['grps'];
+
+ return $filter;
+ }
+
+ function _validatePagination() {
+
+ if ($this->_start >= $this->_user_total) {
+ $this->_start = $this->_user_total - $this->_pagesize;
+ }
+ if ($this->_start < 0) $this->_start = 0;
+
+ $this->_last = min($this->_user_total, $this->_start + $this->_pagesize);
+ }
+
+ /*
+ * return an array of strings to enable/disable pagination buttons
+ */
+ function _pagination() {
+
+ $disabled = 'disabled="disabled"';
+
+ $buttons['start'] = $buttons['prev'] = ($this->_start == 0) ? $disabled : '';
+
+ if ($this->_user_total == -1) {
+ $buttons['last'] = $disabled;
+ $buttons['next'] = '';
+ } else {
+ $buttons['last'] = $buttons['next'] = (($this->_start + $this->_pagesize) >= $this->_user_total) ? $disabled : '';
+ }
+
+ return $buttons;
+ }
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/images/search.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/images/search.png
new file mode 100644
index 000000000..1aa445f03
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/images/search.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/af/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/af/lang.php
new file mode 100644
index 000000000..9a6c5666d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/af/lang.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Afrikaans language file
+ *
+ */
+$lang['user_pass'] = 'Wagwoord';
+$lang['user_name'] = 'Regte Naam';
+$lang['user_mail'] = 'E-pos';
+$lang['edit'] = 'Verander';
+$lang['search'] = 'Soek';
+$lang['start'] = 'begin';
+$lang['prev'] = 'voorigste';
+$lang['next'] = 'volgende';
+$lang['last'] = 'einde';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/add.txt
new file mode 100644
index 000000000..14a10a27d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/add.txt
@@ -0,0 +1 @@
+==== إضاÙØ© حساب ==== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/delete.txt
new file mode 100644
index 000000000..d44bb9fda
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/delete.txt
@@ -0,0 +1 @@
+==== حذ٠الحساب ==== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/edit.txt
new file mode 100644
index 000000000..5db2ce031
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/edit.txt
@@ -0,0 +1 @@
+==== تعديل الحساب ==== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/lang.php
new file mode 100644
index 000000000..88a115de2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/lang.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Arabic language file
+ *
+ * @author Yaman Hokan <always.smile.yh@hotmail.com>
+ */
+$lang['user_id'] = 'اسم المستخدم';
+$lang['user_pass'] = 'كلمة السر';
+$lang['user_name'] = 'الاسم الحقيقي';
+$lang['user_mail'] = 'البريد الالكتروني';
+$lang['user_groups'] = 'المجموعات';
+$lang['field'] = 'حقل';
+$lang['value'] = 'القيمة';
+$lang['add'] = 'إضاÙØ©';
+$lang['delete'] = 'حذÙ';
+$lang['delete_selected'] = 'حذ٠المختار';
+$lang['edit'] = 'تحرير';
+$lang['modify'] = 'Ø­Ùظ التعديلات';
+$lang['search'] = 'بحث';
+$lang['update_exists'] = 'لقد Ùشل تغيير اسم المستخدم , اسم المستخدم المحدد (%s) غير متاح . ( سيتم تطبيق أي تغييرات أخرى )';
+$lang['start'] = 'ابدأ';
+$lang['prev'] = 'السابق';
+$lang['next'] = 'التالي';
+$lang['last'] = 'الأخير';
+$lang['add_ok'] = 'تم بنجاح ضاÙØ© الحساب';
+$lang['add_fail'] = 'Ùشلت إضاÙØ© الحساب';
+$lang['notify_ok'] = 'تم إرسال رسالة الإشعار';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/add.txt
new file mode 100644
index 000000000..e0678198b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/add.txt
@@ -0,0 +1 @@
+===== ДобавÑне на потребител =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/delete.txt
new file mode 100644
index 000000000..aa60fc3df
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/delete.txt
@@ -0,0 +1 @@
+===== Изтриване на потребител =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/edit.txt
new file mode 100644
index 000000000..652d03617
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/edit.txt
@@ -0,0 +1 @@
+===== Редактиране на потребител =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/intro.txt
new file mode 100644
index 000000000..0a9afd513
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/intro.txt
@@ -0,0 +1 @@
+====== Управление на потребителите ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/lang.php
new file mode 100644
index 000000000..58c8453f2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/lang.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * bulgarian language file
+ *
+ * @author Nikolay Vladimirov <nikolay@vladimiroff.com>
+ * @author Viktor Usunov <usun0v@mail.bg>
+ */
+$lang['menu'] = 'Управление на потребителите';
+$lang['noauth'] = '(идентифицирането на потребителите е недоÑтъпно)';
+$lang['nosupport'] = '(не Ñе поддържа управление на потребители)';
+$lang['badauth'] = 'невалиден механизъм при идентификациÑ';
+$lang['user_id'] = 'Потребител';
+$lang['user_pass'] = 'Парола';
+$lang['user_name'] = 'ИÑтинÑко име';
+$lang['user_mail'] = 'Електронна поща';
+$lang['user_groups'] = 'Групи';
+$lang['field'] = 'Поле';
+$lang['value'] = 'СтойноÑÑ‚';
+$lang['add'] = 'ДобавÑне';
+$lang['delete'] = 'Изтриване';
+$lang['delete_selected'] = 'Изтриване на избраните';
+$lang['edit'] = 'Редактиране';
+$lang['edit_prompt'] = 'Редактиране на потребителÑ';
+$lang['modify'] = 'Ð—Ð°Ð¿Ð¸Ñ Ð½Ð° промените';
+$lang['search'] = 'ТърÑене';
+$lang['search_prompt'] = 'ТърÑене';
+$lang['clear'] = 'ОбновÑване на Ñ‚ÑŠÑ€Ñенето';
+$lang['filter'] = 'Филтър';
+$lang['summary'] = 'Показване на потребители %1$d-%2$d от %3$d намерени. %4$d потребители общо.';
+$lang['nonefound'] = 'ÐÑма намерени потребители. Общо %d потребители.';
+$lang['delete_ok'] = '%d потребители изтрити';
+$lang['delete_fail'] = '%d не бÑха изтрити';
+$lang['update_ok'] = 'ОбновÑването на Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ð±Ðµ уÑпешно';
+$lang['update_fail'] = 'ОбновÑването на Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ð±Ðµ неуÑпешно';
+$lang['update_exists'] = 'СмÑната на потребителÑкото име бе невъзможна, оказаното потребителÑко име (%s) вече ÑъщеÑтвува (вÑÑкакви други промени ще бъдат приложени).';
+$lang['start'] = 'начало';
+$lang['prev'] = 'предишно';
+$lang['next'] = 'Ñледващо';
+$lang['last'] = 'поÑледно';
+$lang['edit_usermissing'] = 'ИзбраниÑÑ‚ потребител не бе намерен, оказаното потребителÑко име може да е изтрито или променено другаде.';
+$lang['user_notify'] = 'ОÑведомÑване на потребителÑ';
+$lang['note_notify'] = 'ОÑведомителната e-поща Ñе праща Ñамо, ако на Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ðµ дадена нова парола.';
+$lang['note_group'] = 'Ðовите потребители ще бъдат добавÑни към групата (%s) ако не бъде поÑочена друга.';
+$lang['note_pass'] = 'Паролата ще бъде генерирана автоматично, ако полето е оÑтавено празно и функциÑта за уведомÑване на Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ðµ включена.';
+$lang['add_ok'] = 'ДобавÑнето на Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ð±Ðµ уÑпешно';
+$lang['add_fail'] = 'ДобавÑнето на Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ð±Ðµ неуÑпешно';
+$lang['notify_ok'] = 'ОÑведомително е-пиÑмо бе изпратено';
+$lang['notify_fail'] = 'Пращането на оÑведомително е-пиÑмо е невъзможно';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/list.txt
new file mode 100644
index 000000000..e90205fe6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/list.txt
@@ -0,0 +1 @@
+===== СпиÑък Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ð¸Ñ‚Ðµ =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/add.txt
new file mode 100644
index 000000000..df5ba9235
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/add.txt
@@ -0,0 +1 @@
+===== Afegir usuari =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/delete.txt
new file mode 100644
index 000000000..f386b589a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/delete.txt
@@ -0,0 +1 @@
+===== Borrar usuari =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/edit.txt
new file mode 100644
index 000000000..6b78c127f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/edit.txt
@@ -0,0 +1 @@
+===== Editar usuari =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/intro.txt
new file mode 100644
index 000000000..540a0702e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/intro.txt
@@ -0,0 +1 @@
+====== Gestor d'usuaris ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/lang.php
new file mode 100644
index 000000000..5b0c628ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/lang.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Valencian language file
+ *
+ * @author Bernat Arlandis i Mañó <berarma@ya.com>
+ * @author Bernat Arlandis <berarma@ya.com>
+ * @author Bernat Arlandis <berarma@llenguaitecnologia.com>
+ */
+$lang['menu'] = 'Gestor d\'usuaris';
+$lang['noauth'] = '(autenticació d\'usuaris no disponible)';
+$lang['nosupport'] = '(gestió d\'usuaris no admesa)';
+$lang['badauth'] = 'mecanisme d\'autenticació no vàlit';
+$lang['user_id'] = 'Usuari';
+$lang['user_pass'] = 'Contrasenya';
+$lang['user_name'] = 'Nom real';
+$lang['user_mail'] = 'Correu electrònic';
+$lang['user_groups'] = 'Grups';
+$lang['field'] = 'Camp';
+$lang['value'] = 'Valor';
+$lang['add'] = 'Afegir';
+$lang['delete'] = 'Borrar';
+$lang['delete_selected'] = 'Borrar seleccionats';
+$lang['edit'] = 'Editar';
+$lang['edit_prompt'] = 'Editar est usuari';
+$lang['modify'] = 'Guardar canvis';
+$lang['search'] = 'Buscar';
+$lang['search_prompt'] = 'Començar busca';
+$lang['clear'] = 'Reiniciar filtre de busques';
+$lang['filter'] = 'Filtre';
+$lang['summary'] = 'Mostrant usuaris %1$d-%2$d de %3$d trobats. %4$d usuaris totals.';
+$lang['nonefound'] = 'No s\'han trobat usuaris. %d usuaris totals.';
+$lang['delete_ok'] = '%d usuaris borrats';
+$lang['delete_fail'] = 'Erro borrant %d.';
+$lang['update_ok'] = 'Usuari actualisat correctament';
+$lang['update_fail'] = 'Erro actualisant usuari';
+$lang['update_exists'] = 'Erro canviant el nom de l\'usuari, el nom d\'usuari que ha donat ya existix (els demés canvis s\'aplicaran).';
+$lang['start'] = 'primera';
+$lang['prev'] = 'anterior';
+$lang['next'] = 'següent';
+$lang['last'] = 'última';
+$lang['edit_usermissing'] = 'L\'usuari seleccionat no existix, pot haver segut borrat o modificat des d\'un atre lloc.';
+$lang['user_notify'] = 'Notificar a l\'usuari';
+$lang['note_notify'] = 'Els correus de notificació només s\'envien si a l\'usuari se li assigna una contrasenya nova.';
+$lang['note_group'] = 'Els usuaris nous s\'afegiran al grup predeterminat (%s) si no se n\'especifica atre.';
+$lang['note_pass'] = 'Si es deixa el camp buit i la notificació a l\'usuari està desactivada s\'autogenerarà la contrasenya.';
+$lang['add_ok'] = 'Usuari afegit correctament';
+$lang['add_fail'] = 'Erro afegint usuari';
+$lang['notify_ok'] = 'Correu de notificació enviat';
+$lang['notify_fail'] = 'Erro enviant el correu de notificació';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/list.txt
new file mode 100644
index 000000000..15af2d56f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/list.txt
@@ -0,0 +1 @@
+===== Llista d'usuaris =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/add.txt
new file mode 100644
index 000000000..07c599476
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/add.txt
@@ -0,0 +1 @@
+===== Nou usuari ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/delete.txt
new file mode 100644
index 000000000..90878e563
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/delete.txt
@@ -0,0 +1 @@
+===== Supressió d'usuari ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/edit.txt
new file mode 100644
index 000000000..f7dc8cb8e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/edit.txt
@@ -0,0 +1 @@
+===== Edició d'usuari ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/intro.txt
new file mode 100644
index 000000000..864aa1008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/intro.txt
@@ -0,0 +1 @@
+======= Gestió d'usuaris ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/lang.php
new file mode 100644
index 000000000..445556973
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/lang.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Catalan language file
+ *
+ * @author Carles Bellver <carles.bellver@gmail.com>
+ * @author carles.bellver@gmail.com
+ * @author carles.bellver@cent.uji.es
+ * @author Carles Bellver <carles.bellver@cent.uji.es>
+ */
+$lang['menu'] = 'Gestió d\'usuaris';
+$lang['noauth'] = '(l\'autenticació d\'usuaris no està disponible)';
+$lang['nosupport'] = '(la gestió d\'usuaris no funciona)';
+$lang['badauth'] = 'el mecanisme d\'autenticació no és vàlid';
+$lang['user_id'] = 'Usuari';
+$lang['user_pass'] = 'Contrasenya';
+$lang['user_name'] = 'Nom real';
+$lang['user_mail'] = 'Correu electrònic';
+$lang['user_groups'] = 'Grups';
+$lang['field'] = 'Camp';
+$lang['value'] = 'Valor';
+$lang['add'] = 'Afegeix';
+$lang['delete'] = 'Suprimeix';
+$lang['delete_selected'] = 'Suprimeix els seleccionats';
+$lang['edit'] = 'Edita';
+$lang['edit_prompt'] = 'Edita aquest usuari';
+$lang['modify'] = 'Desa els canvis';
+$lang['search'] = 'Cerca';
+$lang['search_prompt'] = 'Fes la cerca';
+$lang['clear'] = 'Reinicia el filtre de cerca';
+$lang['filter'] = 'Filtre';
+$lang['summary'] = 'Visualització d\'usuaris %1$d-%2$d de %3$d trobats. %4$d usuaris en total.';
+$lang['nonefound'] = 'No s\'han trobat usuaris. %d usuaris en total.';
+$lang['delete_ok'] = 'S\'han suprimit %d usuaris';
+$lang['delete_fail'] = 'No s\'han pogut suprimir %d.';
+$lang['update_ok'] = 'L\'usuari ha estat actualitzat amb èxit';
+$lang['update_fail'] = 'Ha fallat l\'actualització de l\'usuari';
+$lang['update_exists'] = 'No s\'ha pogut canviar el nom de l\'usuari. El nom d\'usuari especificat (%s) ja existeix (qualsevol altre canvi sí que serà efectiu).';
+$lang['start'] = 'inici';
+$lang['prev'] = 'anterior';
+$lang['next'] = 'següent';
+$lang['last'] = 'final';
+$lang['edit_usermissing'] = 'L\'usuari seleccionat no s\'ha pogut trobar. Potser el nom d\'usuari especificat s\'ha suprimit o modificat des d\'un altre lloc.';
+$lang['user_notify'] = 'Notificació a l\'usuari';
+$lang['note_notify'] = 'Els correus de notificació només s\'envien si es canvia la contrasenya de l\'usuari.';
+$lang['note_group'] = 'Els nous usuaris s\'afegeixen al grup per defecte (%s) si no s\'especifica un altre grup.';
+$lang['note_pass'] = 'La contrasenya es generarà automàticament si el camp es deixa en blanc i les notificacions estan habilitades per a aquest usuari.';
+$lang['add_ok'] = 'L\'usuari s\'ha afegit amb èxit';
+$lang['add_fail'] = 'No s\'ha pogut afegir l\'usuari';
+$lang['notify_ok'] = 'S\'ha enviat el correu de notificació';
+$lang['notify_fail'] = 'No s\'ha pogut enviar el correu de notificació';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/list.txt
new file mode 100644
index 000000000..22e1587f4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/list.txt
@@ -0,0 +1 @@
+===== Llista d'usuaris ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/add.txt
new file mode 100644
index 000000000..39b14d554
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/add.txt
@@ -0,0 +1 @@
+===== Přidat uživatele =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/delete.txt
new file mode 100644
index 000000000..a8790d87d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/delete.txt
@@ -0,0 +1 @@
+===== Smazat uživatele =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/edit.txt
new file mode 100644
index 000000000..d8ba38605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/edit.txt
@@ -0,0 +1 @@
+===== Upravit uživatele =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/intro.txt
new file mode 100644
index 000000000..5b8f6e90b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/intro.txt
@@ -0,0 +1 @@
+====== Správa uživatelů ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/lang.php
new file mode 100644
index 000000000..6f368bd0f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/lang.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Czech language file
+ *
+ * @author Tomas Valenta <t.valenta@sh.cvut.cz>
+ * @author Zbynek Krivka <zbynek.krivka@seznam.cz>
+ * @author Bohumir Zamecnik <bohumir@zamecnik.org>
+ * @author tomas@valenta.cz
+ */
+$lang['menu'] = 'Správa uživatelů';
+$lang['noauth'] = '(autentizace uživatelů není k dispozici)';
+$lang['nosupport'] = '(správa uživatelů není podporována)';
+$lang['badauth'] = 'chybná metoda autentizace';
+$lang['user_id'] = 'Uživatel';
+$lang['user_pass'] = 'Heslo';
+$lang['user_name'] = 'Celé jméno';
+$lang['user_mail'] = 'E-mail';
+$lang['user_groups'] = 'Skupiny';
+$lang['field'] = 'Položka';
+$lang['value'] = 'Hodnota';
+$lang['add'] = 'Přidat';
+$lang['delete'] = 'Smazat';
+$lang['delete_selected'] = 'Smazat vybrané';
+$lang['edit'] = 'Upravit';
+$lang['edit_prompt'] = 'Upravit uživatele';
+$lang['modify'] = 'Uložit změny';
+$lang['search'] = 'Hledání';
+$lang['search_prompt'] = 'Prohledat';
+$lang['clear'] = 'Zrušit vyhledávací filtr';
+$lang['filter'] = 'Filtr';
+$lang['summary'] = 'Zobrazuji uživatele %1$d-%2$d z %3$d nalezených. Celkem %4$d uživatelů.';
+$lang['nonefound'] = 'Žadný uživatel nenalezen. Celkem %d uživatelů.';
+$lang['delete_ok'] = '%d uživatelů smazáno';
+$lang['delete_fail'] = '%d uživatelů nelze smazat.';
+$lang['update_ok'] = 'Uživatel upraven';
+$lang['update_fail'] = 'Úprava uživatele selhala';
+$lang['update_exists'] = 'Jméno nelze změnit, jelikož zadané uživatelské jméno (%s) již existuje (ostatní změny ale budou provedeny).';
+$lang['start'] = 'první';
+$lang['prev'] = 'předchozí';
+$lang['next'] = 'další';
+$lang['last'] = 'poslední';
+$lang['edit_usermissing'] = 'Vybraný uživatel nebyl nalezen, zadané uživatelského mohlo být smazáno nebo změněno.';
+$lang['user_notify'] = 'Upozornit uživatele';
+$lang['note_notify'] = 'Maily s upozorněním se budou posílat pouze, když uživatel dostává nové heslo.';
+$lang['note_group'] = 'Noví uživatelé budou přidáváni do této výchozí skupiny (%s), pokud pro ně není uvedena žádná skupina.';
+$lang['note_pass'] = 'Heslo bude automaticky vygenerováno pokud je pole ponacháno prázdné a je zapnutá notifikace uživatele.';
+$lang['add_ok'] = 'Uživatel úspěšně vytvořen';
+$lang['add_fail'] = 'Vytvoření uživatele selhalo';
+$lang['notify_ok'] = 'Odeslán mail s upozorněním';
+$lang['notify_fail'] = 'Mail s upozorněním nebylo možno odeslat';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/list.txt
new file mode 100644
index 000000000..36b87fed9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/list.txt
@@ -0,0 +1 @@
+===== Seznam uživatelů =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/add.txt
new file mode 100644
index 000000000..d97de4248
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/add.txt
@@ -0,0 +1 @@
+===== Tilføj bruger =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/delete.txt
new file mode 100644
index 000000000..dff05454c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/delete.txt
@@ -0,0 +1 @@
+===== Slet bruger =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/edit.txt
new file mode 100644
index 000000000..05d63b7b0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/edit.txt
@@ -0,0 +1 @@
+===== Rediger bruger =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/intro.txt
new file mode 100644
index 000000000..3f597a243
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/intro.txt
@@ -0,0 +1 @@
+====== Brugerstyring ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/lang.php
new file mode 100644
index 000000000..42bdcb7c3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/lang.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * Danish language file
+ *
+ * @author Lars Næsbye Christensen <larsnaesbye@stud.ku.dk>
+ * @author Kalle Sommer Nielsen <kalle@php.net>
+ * @author Esben Laursen <hyber@hyber.dk>
+ * @author Harith <haj@berlingske.dk>
+ * @author Daniel Ejsing-Duun <dokuwiki@zilvador.dk>
+ * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
+ */
+$lang['menu'] = 'Brugerstyring';
+$lang['noauth'] = '(Brugervalidering er ikke tilgængelig)';
+$lang['nosupport'] = '(Brugerstyring er ikke understøttet)';
+$lang['badauth'] = 'Ugyldig brugerbekræftelsesfunktion';
+$lang['user_id'] = 'Bruger';
+$lang['user_pass'] = 'Adgangskode';
+$lang['user_name'] = 'Navn';
+$lang['user_mail'] = 'E-mail';
+$lang['user_groups'] = 'Grupper';
+$lang['field'] = 'Felt';
+$lang['value'] = 'Værdi';
+$lang['add'] = 'Tilføj';
+$lang['delete'] = 'Slet';
+$lang['delete_selected'] = 'Slet valgte';
+$lang['edit'] = 'Rediger';
+$lang['edit_prompt'] = 'Rediger denne bruger';
+$lang['modify'] = 'Gem ændringer';
+$lang['search'] = 'Søg';
+$lang['search_prompt'] = 'Udfør søgning';
+$lang['clear'] = 'Nulstil søgefilter';
+$lang['filter'] = 'Filter';
+$lang['summary'] = 'Viser brugerne %1$d-%2$d ud af %3$d fundne. %4$d brugere totalt.';
+$lang['nonefound'] = 'Ingen brugere fundet. %d brugere totalt.';
+$lang['delete_ok'] = '%d brugere slettet';
+$lang['delete_fail'] = '%d kunne ikke slettes.';
+$lang['update_ok'] = 'Bruger opdateret korrekt';
+$lang['update_fail'] = 'Brugeropdatering mislykkedes';
+$lang['update_exists'] = 'Ændring af brugernavn mislykkedes, det valgte brugernavn (%s) er allerede optaget (andre ændringer vil blive udført).';
+$lang['start'] = 'begynde';
+$lang['prev'] = 'forrige';
+$lang['next'] = 'næste';
+$lang['last'] = 'sidste';
+$lang['edit_usermissing'] = 'Den valgte bruger blev ikke fundet. Brugernavnet kan være slettet eller ændret andetsteds.';
+$lang['user_notify'] = 'Meddel bruger';
+$lang['note_notify'] = 'Meddelelser bliver kun sendt, hvis brugeren får givet et nyt adgangskode.';
+$lang['note_group'] = 'Nye brugere vil blive tilføjet til standardgruppen (%s), hvis ingen gruppe er opgivet.';
+$lang['note_pass'] = 'Adgangskoden vil blive dannet automatisk, hvis feltet er tomt og underretning af brugeren er aktiveret.';
+$lang['add_ok'] = 'Bruger tilføjet uden fejl.';
+$lang['add_fail'] = 'Tilføjelse af bruger mislykkedes';
+$lang['notify_ok'] = 'Meddelelse sendt';
+$lang['notify_fail'] = 'Meddelelse kunne ikke sendes';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/list.txt
new file mode 100644
index 000000000..11d1710a0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/list.txt
@@ -0,0 +1 @@
+===== Brugerliste =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/add.txt
new file mode 100644
index 000000000..1fc34c968
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/add.txt
@@ -0,0 +1 @@
+===== Benutzer hinzufügen ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/delete.txt
new file mode 100644
index 000000000..778396aa0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/delete.txt
@@ -0,0 +1 @@
+===== Benutzer gelöscht ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/edit.txt
new file mode 100644
index 000000000..291b0f19d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/edit.txt
@@ -0,0 +1 @@
+===== Benutzer bearbeiten ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/intro.txt
new file mode 100644
index 000000000..a5927a89d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/intro.txt
@@ -0,0 +1 @@
+===== Benutzerverwaltung ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/lang.php
new file mode 100644
index 000000000..d9011468b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/lang.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * German (informal) language file
+ *
+ * @author Alexander Fischer <tbanus@os-forge.net>
+ * @author Juergen Schwarzer <jschwarzer@freenet.de>
+ */
+$lang['menu'] = 'Benutzerverwalter';
+$lang['noauth'] = '(Benutzeranmeldung ist nicht verfügbar)';
+$lang['nosupport'] = '(Benutzerverwaltung wird nicht unterstützt)';
+$lang['badauth'] = 'Ungültige Authentifizerung';
+$lang['user_id'] = 'Benutzer';
+$lang['user_pass'] = 'Passwort';
+$lang['user_name'] = 'Echter Name';
+$lang['user_mail'] = 'Email';
+$lang['user_groups'] = 'Gruppen';
+$lang['field'] = 'Feld';
+$lang['value'] = 'Wert';
+$lang['add'] = 'Zufügen';
+$lang['delete'] = 'Löschen';
+$lang['delete_selected'] = 'Lösche ausgewähltes';
+$lang['edit'] = 'Editieren';
+$lang['edit_prompt'] = 'Editiere den Benutzer';
+$lang['modify'] = 'Änderungen speichern';
+$lang['search'] = 'Suchen';
+$lang['search_prompt'] = 'Suche ausführen';
+$lang['clear'] = 'Suchfilter zurücksetzen';
+$lang['filter'] = 'Filter';
+$lang['summary'] = 'Zeige Benutzer %1$d-%2$d von %3$d gefundenen. %4$d Benutzer insgesamt.';
+$lang['nonefound'] = 'Keinen Benutzer gefunden. Insgesamt %d Benutzer.';
+$lang['delete_ok'] = '%d Benutzer wurden gelöscht';
+$lang['delete_fail'] = '%d konnte nicht gelöscht werden';
+$lang['update_ok'] = 'Benutzer wurde erfolgreich aktualisiert';
+$lang['update_fail'] = 'Aktualisierung des Benutzers ist fehlgeschlagen';
+$lang['update_exists'] = 'Benutzername konnte nicht geändert werden, der angegebene Benutzername (%s) existiert bereits (alle anderen Änderungen werden angewandt).';
+$lang['start'] = 'Start';
+$lang['prev'] = 'vorige';
+$lang['next'] = 'nächste';
+$lang['last'] = 'letzte';
+$lang['edit_usermissing'] = 'Der gewählte Benutzer wurde nicht gefunden. Der angegebene Benutzername könnte gelöscht oder an anderer Stelle geändert worden sein.';
+$lang['user_notify'] = 'Benutzer benachrichtigen';
+$lang['note_notify'] = 'Benachrichtigungsemails werden nur versandt, wenn der Benutzer ein neues Kennwort erhält.';
+$lang['note_group'] = 'Neue Benutzer werden zur Standardgruppe (%s) hinzugefügt, wenn keine Gruppe angegeben wird.';
+$lang['note_pass'] = 'Das Passwort wird automatisch erzeugt, wenn das Feld freigelassen wird und der Benutzer Benachrichtigungen aktiviert hat.';
+$lang['add_ok'] = 'Benutzer erfolgreich hinzugefügt';
+$lang['add_fail'] = 'Hinzufügen des Benutzers fehlgeschlagen';
+$lang['notify_ok'] = 'Benachrichtigungsemail wurde versendet';
+$lang['notify_fail'] = 'Benachrichtigungsemail konnte nicht gesendet werden';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/list.txt
new file mode 100644
index 000000000..0a62012e5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/list.txt
@@ -0,0 +1 @@
+===== Benutzerliste ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/add.txt
new file mode 100644
index 000000000..925fa5042
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/add.txt
@@ -0,0 +1 @@
+===== Benutzer hinzufügen =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/delete.txt
new file mode 100644
index 000000000..4f3bbbd03
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/delete.txt
@@ -0,0 +1 @@
+===== Benutzer löschen =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/edit.txt
new file mode 100644
index 000000000..9419200dd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/edit.txt
@@ -0,0 +1 @@
+===== Benutzer ändern =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/intro.txt
new file mode 100644
index 000000000..a5837b8c7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/intro.txt
@@ -0,0 +1 @@
+====== Benutzer-Manager ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/lang.php
new file mode 100644
index 000000000..913537f06
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/lang.php
@@ -0,0 +1,56 @@
+<?php
+/**
+ * German language file
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Michael Klier <chi@chimeric.de>
+ * @author Leo Moll <leo@yeasoft.com>
+ * @author Florian Anderiasch <fa@art-core.org>
+ * @author Robin Kluth <commi1993@gmail.com>
+ * @author Arne Pelka <mail@arnepelka.de>
+ * @author Dirk Einecke <dirk@dirkeinecke.de>
+ * @author Blitzi94@gmx.de
+ * @author Robert Bogenschneider <robog@GMX.de>
+ */
+$lang['menu'] = 'Benutzerverwaltung';
+$lang['noauth'] = '(Authentifizierungssystem nicht verfügbar)';
+$lang['nosupport'] = '(Benutzerverwaltung nicht unterstützt)';
+$lang['badauth'] = 'Ungültige Methode zur Authentifizierung';
+$lang['user_id'] = 'Benutzername';
+$lang['user_pass'] = 'Passwort';
+$lang['user_name'] = 'Voller Name';
+$lang['user_mail'] = 'E-Mail';
+$lang['user_groups'] = 'Gruppen';
+$lang['field'] = 'Feld';
+$lang['value'] = 'Wert';
+$lang['add'] = 'Hinzufügen';
+$lang['delete'] = 'Löschen';
+$lang['delete_selected'] = 'Ausgewählte löschen';
+$lang['edit'] = 'Ändern';
+$lang['edit_prompt'] = 'Benutzerdaten ändern';
+$lang['modify'] = 'Speichern';
+$lang['search'] = 'Suchen';
+$lang['search_prompt'] = 'Benutzerdaten filtern';
+$lang['clear'] = 'Filter zurücksetzen';
+$lang['filter'] = 'Filter';
+$lang['summary'] = 'Zeige Benutzer %1$d-%2$d von %3$d gefundenen. %4$d Benutzer insgesamt.';
+$lang['nonefound'] = 'Keine Benutzer gefunden. %d Benutzer insgesamt.';
+$lang['delete_ok'] = '%d Benutzer gelöscht';
+$lang['delete_fail'] = '%d konnten nicht gelöscht werden.';
+$lang['update_ok'] = 'Benutzerdaten erfolgreich geändert.';
+$lang['update_fail'] = 'Änderung der Benutzerdaten fehlgeschlagen.';
+$lang['update_exists'] = 'Nutzername konnte nicht geändert werden, weil der angegebene Nutzer (%s) bereits existiert (alle anderen Änderungen wurden durchgeführt).';
+$lang['start'] = 'Anfang';
+$lang['prev'] = 'Vorherige';
+$lang['next'] = 'Nächste';
+$lang['last'] = 'Ende';
+$lang['edit_usermissing'] = 'Der ausgewählte Nutzer wurde nicht gefunden. Möglicherweise wurde er gelöscht oder der Nutzer wurde anderswo geändert.';
+$lang['user_notify'] = 'Nutzer benachrichtigen';
+$lang['note_notify'] = 'Benachrichtigungs-E-Mails werden nur versandt, wenn ein neues Passwort vergeben wurde.';
+$lang['note_group'] = 'Neue Nutzer werden der Standard-Gruppe (%s) hinzugefügt, wenn keine Gruppe angegeben wurde.';
+$lang['note_pass'] = 'Das Password wird automatisch generiert, wenn das entsprechende Feld leergelassen wird und die Benachrichtigung des Nutzers aktiviert ist.';
+$lang['add_ok'] = 'Nutzer erfolgreich angelegt';
+$lang['add_fail'] = 'Nutzer konnte nicht angelegt werden';
+$lang['notify_ok'] = 'Benachrichtigungsmail wurde versandt';
+$lang['notify_fail'] = 'Benachrichtigungsmail konnte nicht versandt werden';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/list.txt
new file mode 100644
index 000000000..8d6d5fb46
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/list.txt
@@ -0,0 +1 @@
+===== Benutzerliste =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/add.txt
new file mode 100644
index 000000000..0616f8c53
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/add.txt
@@ -0,0 +1 @@
+===== ΠÏοσθήκη ΧÏήστη =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/delete.txt
new file mode 100644
index 000000000..baf9bc054
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/delete.txt
@@ -0,0 +1 @@
+===== ΔιαγÏαφή ΧÏήστη =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/edit.txt
new file mode 100644
index 000000000..dec59efd7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/edit.txt
@@ -0,0 +1 @@
+===== ΤÏοποποίηση ΧÏήστη =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/intro.txt
new file mode 100644
index 000000000..874c13b57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/intro.txt
@@ -0,0 +1 @@
+====== ΔιαχείÏιση ΧÏηστών ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/lang.php
new file mode 100644
index 000000000..3c5c9b902
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/lang.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * Greek language file
+ *
+ * Based on DokuWiki Version rc2007-05-24 english language file
+ * Original english language file contents included for reference
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @author Thanos Massias <tm@thriasio.gr>
+ * @author Αθανάσιος Îταής <homunculus@wana.gr>
+ * @author Konstantinos Koryllos <koryllos@gmail.com>
+ */
+$lang['menu'] = 'ΔιαχείÏιση ΧÏηστών';
+$lang['noauth'] = '(η είσοδος χÏηστών δεν είναι δυνατή)';
+$lang['nosupport'] = '(δεν υποστηÏίζεται η διαχείÏιση χÏηστών)';
+$lang['badauth'] = 'μη επιτÏεπτός μηχανισμός πιστοποίησης';
+$lang['user_id'] = 'ΧÏήστης';
+$lang['user_pass'] = 'Κωδικός';
+$lang['user_name'] = 'ΠλήÏες όνομα';
+$lang['user_mail'] = 'e-mail';
+$lang['user_groups'] = 'Ομάδες';
+$lang['field'] = 'Πεδίο';
+$lang['value'] = 'Τιμή';
+$lang['add'] = 'ΠÏοσθήκη';
+$lang['delete'] = 'ΔιαγÏαφή';
+$lang['delete_selected'] = 'ΔιαγÏαφή επιλεγμένων χÏηστών';
+$lang['edit'] = 'ΤÏοποποίηση';
+$lang['edit_prompt'] = 'ΤÏοποποίηση χÏήστη';
+$lang['modify'] = 'Αποθήκευση αλλαγών';
+$lang['search'] = 'Αναζήτηση';
+$lang['search_prompt'] = 'Εκκίνηση αναζήτησης';
+$lang['clear'] = 'ΚαθαÏισμός φίλτÏων';
+$lang['filter'] = 'ΦίλτÏο';
+$lang['summary'] = 'Εμφάνιση χÏηστών %1$d-%2$d από %3$d σχετικοÏÏ‚. %4$d χÏήστες συνολικά.';
+$lang['nonefound'] = 'Δεν βÏέθηκαν σχετικοί χÏήστες. %d χÏήστες συνολικά.';
+$lang['delete_ok'] = '%d χÏήστες διεγÏάφησαν';
+$lang['delete_fail'] = '%d χÏήστες δεν διεγÏάφησαν.';
+$lang['update_ok'] = 'Επιτυχημένη Ï„Ïοποποίηση Ï€Ïοφίλ χÏήστη';
+$lang['update_fail'] = 'Αποτυχημένη Ï„Ïοποποίηση Ï€Ïοφίλ χÏήστη';
+$lang['update_exists'] = 'Η αλλαγή ονόματος χÏήστη απέτυχε -- το νέο όνομα χÏήστη (%s) ήδη υπάÏχει (τυχόν άλλες αλλαγές θα εφαÏμοστοÏν).';
+$lang['start'] = 'αÏχή';
+$lang['prev'] = 'Ï€ÏοηγοÏμενα';
+$lang['next'] = 'επόμενα';
+$lang['last'] = 'τέλος';
+$lang['edit_usermissing'] = 'Ο επιλεγμένος χÏήστης δεν βÏέθηκε. Πιθανόν να διαγÏάφηκε στο μεταξÏ.';
+$lang['user_notify'] = 'Ειδοποίηση χÏήστη';
+$lang['note_notify'] = 'Τα ενημεÏωτικά e-mails στέλνονται μόνο όταν δίνεται νέος κωδικός στον χÏήστη.';
+$lang['note_group'] = 'Οι νέοι χÏήστες θα ανήκουν στην ομάδα (%s) αν δεν οÏιστεί άλλη ομάδα.';
+$lang['note_pass'] = 'Ο κωδικός θα δημιουÏγηθεί αυτόματα εάν το πεδίο μείνει κενό και έχει επιλεγεί η αποστολή ειδοποίησης χÏήστη.';
+$lang['add_ok'] = 'Επιτυχημένη εγγÏαφή χÏήστη';
+$lang['add_fail'] = 'Η εγγÏαφή του χÏήστη απέτυχε';
+$lang['notify_ok'] = 'Εστάλη ενημεÏωτικό e-mail';
+$lang['notify_fail'] = 'Δεν ήταν δυνατή η αποστολή του ενημεÏÏ‰Ï„Î¹ÎºÎ¿Ï e-mail';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/list.txt
new file mode 100644
index 000000000..adb5c210b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/list.txt
@@ -0,0 +1 @@
+===== Κατάλογος ΧÏηστών =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/add.txt
new file mode 100644
index 000000000..9afecb5cd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/add.txt
@@ -0,0 +1 @@
+===== Add user =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/delete.txt
new file mode 100644
index 000000000..c3ca90dbb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/delete.txt
@@ -0,0 +1 @@
+===== Delete user =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/edit.txt
new file mode 100644
index 000000000..4d02dfddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/edit.txt
@@ -0,0 +1 @@
+===== Edit user =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/intro.txt
new file mode 100644
index 000000000..73bf55613
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/intro.txt
@@ -0,0 +1 @@
+====== User Manager ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/lang.php
new file mode 100644
index 000000000..189a1db20
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/lang.php
@@ -0,0 +1,58 @@
+<?php
+/**
+ * English language file
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+
+$lang['menu'] = 'User Manager';
+
+// custom language strings for the plugin
+$lang['noauth'] = '(user authentication not available)';
+$lang['nosupport'] = '(user management not supported)';
+
+$lang['badauth'] = 'invalid auth mechanism'; // should never be displayed!
+
+$lang['user_id'] = 'User';
+$lang['user_pass'] = 'Password';
+$lang['user_name'] = 'Real Name';
+$lang['user_mail'] = 'Email';
+$lang['user_groups'] = 'Groups';
+
+$lang['field'] = 'Field';
+$lang['value'] = 'Value';
+$lang['add'] = 'Add';
+$lang['delete'] = 'Delete';
+$lang['delete_selected'] = 'Delete Selected';
+$lang['edit'] = 'Edit';
+$lang['edit_prompt'] = 'Edit this user';
+$lang['modify'] = 'Save Changes';
+$lang['search'] = 'Search';
+$lang['search_prompt'] = 'Perform search';
+$lang['clear'] = 'Reset Search Filter';
+$lang['filter'] = 'Filter';
+
+$lang['summary'] = 'Displaying users %1$d-%2$d of %3$d found. %4$d users total.';
+$lang['nonefound'] = 'No users found. %d users total.';
+$lang['delete_ok'] = '%d users deleted';
+$lang['delete_fail'] = '%d failed deleting.';
+$lang['update_ok'] = 'User updated successfully';
+$lang['update_fail'] = 'User update failed';
+$lang['update_exists'] = 'User name change failed, the specified user name (%s) already exists (any other changes will be applied).';
+
+$lang['start'] = 'start';
+$lang['prev'] = 'previous';
+$lang['next'] = 'next';
+$lang['last'] = 'last';
+
+// added after 2006-03-09 release
+$lang['edit_usermissing'] = 'Selected user not found, the specified user name may have been deleted or changed elsewhere.';
+$lang['user_notify'] = 'Notify user';
+$lang['note_notify'] = 'Notification emails are only sent if the user is given a new password.';
+$lang['note_group'] = 'New users will be added to the default group (%s) if no group is specified.';
+$lang['note_pass'] = 'The password will be autogenerated if the field is left empty and notification of the user is enabled.';
+$lang['add_ok'] = 'User added successfully';
+$lang['add_fail'] = 'User addition failed';
+$lang['notify_ok'] = 'Notification email sent';
+$lang['notify_fail'] = 'Notification email could not be sent';
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/list.txt
new file mode 100644
index 000000000..54c45caf7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/list.txt
@@ -0,0 +1 @@
+===== User List =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/add.txt
new file mode 100644
index 000000000..8775ff85d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/add.txt
@@ -0,0 +1 @@
+===== Aldoni uzanton ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/delete.txt
new file mode 100644
index 000000000..0d94f8122
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/delete.txt
@@ -0,0 +1 @@
+===== Forigi uzanton ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/edit.txt
new file mode 100644
index 000000000..2ced16e7c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/edit.txt
@@ -0,0 +1 @@
+===== Modifi uzanton ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/intro.txt
new file mode 100644
index 000000000..2ef373f66
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/intro.txt
@@ -0,0 +1 @@
+====== Administrado de Uzantoj ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/lang.php
new file mode 100644
index 000000000..0eb99b862
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/lang.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Esperantolanguage file
+ *
+ * @author Felipe Castro <fefcas@uol.com.br>
+ * @author Felipe Castro <fefcas@gmail.com>
+ * @author Felipe Castro <fefcas (cxe) gmail (punkto) com>
+ * @author Felipo Kastro <fefcas@gmail.com>
+ * @author Robert Bogenschneider <robog@gmx.de>
+ * @author Erik Pedersen <erik pedersen@shaw.ca>
+ * @author Erik Pedersen <erik.pedersen@shaw.ca>
+ * @author Robert Bogenschneider <robog@GMX.de>
+ */
+$lang['menu'] = 'Administrado de Uzantoj';
+$lang['noauth'] = '(identiÄo de uzantoj ne disponeblas)';
+$lang['nosupport'] = '(administro de uzantoj ne estas subtenata)';
+$lang['badauth'] = 'tiu identiÄa procezo ne validas';
+$lang['user_id'] = 'Uzanto';
+$lang['user_pass'] = 'Pasvorto';
+$lang['user_name'] = 'Vera nomo';
+$lang['user_mail'] = 'Retadreso';
+$lang['user_groups'] = 'Grupoj';
+$lang['field'] = 'Kampo';
+$lang['value'] = 'Valoro';
+$lang['add'] = 'Aldoni';
+$lang['delete'] = 'Forigi';
+$lang['delete_selected'] = 'Forigi elektitan';
+$lang['edit'] = 'Modifi';
+$lang['edit_prompt'] = 'Modifi tiun ĉi uzanton';
+$lang['modify'] = 'Registri modifojn';
+$lang['search'] = 'Serĉi';
+$lang['search_prompt'] = 'Fari serĉon';
+$lang['clear'] = 'Refari serĉan filtron';
+$lang['filter'] = 'Filtro';
+$lang['summary'] = 'MontriÄas uzantoj %1$d-%2$d el %3$d trovitaj. %4$d uzantoj entute.';
+$lang['nonefound'] = 'Neniu uzantoj troviÄas. %d uzantoj entute.';
+$lang['delete_ok'] = '%d uzantoj estis forigitaj';
+$lang['delete_fail'] = '%d malsukcesis esti forigitaj.';
+$lang['update_ok'] = 'Tiu uzanto estis sukcese Äisdatigita';
+$lang['update_fail'] = 'Malsukceso okazis por Äisdatigi tiun uzanton';
+$lang['update_exists'] = 'Malsukceso okazis por ÅanÄi la nomon de tiu uzanto: la enmetita nomo (%s) jam ekzistas (ĉiuj aliaj ÅanÄoj estos aplikitaj)';
+$lang['start'] = 'Ekigi';
+$lang['prev'] = 'antaÅ­e';
+$lang['next'] = 'sekve';
+$lang['last'] = 'laste';
+$lang['edit_usermissing'] = 'La elektita uzanto ne estis trovita: tiu nomo povis esti forigita aÅ­ ÅanÄita aliloke.';
+$lang['user_notify'] = 'Avizi uzanton';
+$lang['note_notify'] = 'Avizantaj mesaÄoj estos sendataj nur se la uzanto ekhavos novan pasvorton.';
+$lang['note_group'] = 'Novaj uzantoj estos aldonitaj al la komuna grupo (%s) se neniu alia estos specifita.';
+$lang['note_pass'] = 'La pasvorto estos aÅ­tomate kreita se la kampo estos lasita malplena kaj \'aviso al uzantoj\' estos ebligita.';
+$lang['add_ok'] = 'La uzanto estis sukcese aldonita';
+$lang['add_fail'] = 'Malsukceso okazis por aldoni uzulon';
+$lang['notify_ok'] = 'Avizanta mesaÄo estis sendita';
+$lang['notify_fail'] = 'La avizanta mesaÄo ne povis esti sendita';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/list.txt
new file mode 100644
index 000000000..714671afb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/list.txt
@@ -0,0 +1 @@
+===== Listo de Uzantoj ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/add.txt
new file mode 100644
index 000000000..90c56e31d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/add.txt
@@ -0,0 +1 @@
+===== Agregar un usuario =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/delete.txt
new file mode 100644
index 000000000..4c552a9c1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/delete.txt
@@ -0,0 +1 @@
+===== Eliminar un usuario =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/edit.txt
new file mode 100644
index 000000000..ccdd26f86
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/edit.txt
@@ -0,0 +1 @@
+===== Editar datos del usuario =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/intro.txt
new file mode 100644
index 000000000..e558d3a28
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/intro.txt
@@ -0,0 +1 @@
+====== Administración de usuarios ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/lang.php
new file mode 100644
index 000000000..c11ebcd93
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/lang.php
@@ -0,0 +1,60 @@
+<?php
+/**
+ * Spanish language file
+ *
+ * @author Miguel Pagano <miguel.pagano>
+ * @author Oscar M. Lage <r0sk10@gmail.com>
+ * @author Gabriel Castillo <gch@pumas.ii.unam.mx>
+ * @author oliver@samera.com.py
+ * @author Enrico Nicoletto <liverig@gmail.com>
+ * @author Manuel Meco <manuel.meco@gmail.com>
+ * @author VictorCastelan <victorcastelan@gmail.com>
+ * @author Jordan Mero hack.jord@gmail.com
+ * @author Felipe Martinez <metalmartinez@gmail.com>
+ * @author Javier Aranda <internet@javierav.com>
+ * @author Zerial <fernando@zerial.org>
+ * @author Marvin Ortega <maty1206@maryanlinux.com>
+ * @author Daniel Castro Alvarado <dancas2@gmail.com>
+ * @author Fernando J. Gómez <fjgomez@gmail.com>
+ */
+$lang['menu'] = 'Administración de usuarios';
+$lang['noauth'] = '(la autenticación de usuarios no está disponible)';
+$lang['nosupport'] = '(la administración de usuarios no está habilitada)';
+$lang['badauth'] = 'Mecanismo de autenticación inválido';
+$lang['user_id'] = 'Usuario';
+$lang['user_pass'] = 'Contraseña';
+$lang['user_name'] = 'Nombre';
+$lang['user_mail'] = 'Correo electrónico';
+$lang['user_groups'] = 'Grupos';
+$lang['field'] = 'Campo';
+$lang['value'] = 'Valor';
+$lang['add'] = 'Agregar';
+$lang['delete'] = 'Eliminar';
+$lang['delete_selected'] = 'Eliminar seleccionados';
+$lang['edit'] = 'Editar';
+$lang['edit_prompt'] = 'Editar datos de este usuario';
+$lang['modify'] = 'Guardar los cambios';
+$lang['search'] = 'Buscar';
+$lang['search_prompt'] = 'Realizar la búsqueda';
+$lang['clear'] = 'Limpiar los filtros de la búsqueda';
+$lang['filter'] = 'Filtrar';
+$lang['summary'] = 'Mostrando los usuarios %1$d-%2$d de %3$d encontrados. Cantidad total de usuarios %4$d.';
+$lang['nonefound'] = 'No se encontraron usuarios que coincidan con los párametros de la búsqueda. Cantidad total de usuarios %d.';
+$lang['delete_ok'] = '%d usuarios eliminados';
+$lang['delete_fail'] = '%d no se pudieron eliminar.';
+$lang['update_ok'] = 'Los datos del usuario se actualizaron exitosamente ';
+$lang['update_fail'] = 'Los datos del usuario no se actualizaron';
+$lang['update_exists'] = 'El cambio de nombre de usuario falló, el nombre especificado ($s) ya está en uso (los otros cambios se aplicaron).';
+$lang['start'] = 'primera';
+$lang['prev'] = 'anterior';
+$lang['next'] = 'siguiente';
+$lang['last'] = 'última';
+$lang['edit_usermissing'] = 'El usuario seleccionado no ha sido encontrado; el usuario especificado puede haber sido eliminado o cambiado en algún otro lugar.';
+$lang['user_notify'] = 'Notificar al usuario';
+$lang['note_notify'] = 'El correo electrónico de notificación sólo será enviado si se actualizo la contraseña del usuario.';
+$lang['note_group'] = 'Si no se especifica ningún grupo, los nuevos usuarios serán agregados al grupo por defecto (%s).';
+$lang['note_pass'] = 'Se generará una clave automáticamente si el campo izquierdo es vacío y se esta activo la notificación de usuario. ';
+$lang['add_ok'] = 'El usuario fue creado exitosamente';
+$lang['add_fail'] = 'Falló la creación del usuario';
+$lang['notify_ok'] = 'Se envió la notificación por correo electrónico';
+$lang['notify_fail'] = 'No se pudo enviar la notificación por correo electrónico';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/list.txt
new file mode 100644
index 000000000..d0d32b913
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/list.txt
@@ -0,0 +1 @@
+===== Lista de usuarios =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/add.txt
new file mode 100644
index 000000000..855c43218
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/add.txt
@@ -0,0 +1 @@
+===== Erabiltzailea gehitu ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/delete.txt
new file mode 100644
index 000000000..987b98f20
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/delete.txt
@@ -0,0 +1 @@
+===== Erabiltzailea ezabatu ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/edit.txt
new file mode 100644
index 000000000..82b92afe7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/edit.txt
@@ -0,0 +1 @@
+====== Editatu erabiltzailea ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/intro.txt
new file mode 100644
index 000000000..848b3da05
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/intro.txt
@@ -0,0 +1 @@
+====== Erabiltzaile Kudeatzailea ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/lang.php
new file mode 100644
index 000000000..b6e04f7c4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/lang.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Basque language file
+ *
+ * @author Inko Illarramendi <inko.i.a@gmail.com>
+ */
+$lang['menu'] = 'Erabiltzaile Kudeatzailea';
+$lang['noauth'] = '(erabiltzaile kautotzea ez dago erabilgarri)';
+$lang['nosupport'] = '(erabiltzaile kudeaketa ez dago erabilgarri)';
+$lang['badauth'] = 'kautotze mekanismo baliogabea';
+$lang['user_id'] = 'Erabiltzailea';
+$lang['user_pass'] = 'Pasahitza';
+$lang['user_name'] = 'Benetako Izena';
+$lang['user_mail'] = 'Posta-e';
+$lang['user_groups'] = 'Taldeak';
+$lang['field'] = 'Eremu';
+$lang['value'] = 'Balioa';
+$lang['add'] = 'Gehitu';
+$lang['delete'] = 'Ezabatu';
+$lang['delete_selected'] = 'Ezabatu Hautatutakoak';
+$lang['edit'] = 'Editatu';
+$lang['edit_prompt'] = 'Editatu erabiltzaile hau';
+$lang['modify'] = 'Gorde Aldaketak';
+$lang['search'] = 'Bilatu';
+$lang['search_prompt'] = 'Egin bilaketa';
+$lang['clear'] = 'Berrasieratu Bilaketa Iragazkia';
+$lang['filter'] = 'Iragazi';
+$lang['summary'] = 'Erakusten diren erabiltzaileak %1$d-%2$d bilatutako %3$d erabiltzailetatik. %4$d erabiltzaile guztira.';
+$lang['nonefound'] = 'Ez da erabiltzailerik aurkitu. %d erabiltzaile guztira.';
+$lang['delete_ok'] = '%d erabiltzaile ezabatuak';
+$lang['delete_fail'] = '%d huts ezabatzean.';
+$lang['update_ok'] = 'Erabiltzailea arrakastaz eguneratuak';
+$lang['update_fail'] = 'Erabiltzaile eguneratzeak huts egin du ';
+$lang['update_exists'] = 'Erabiltzaile izen aldaketak huts egin du, zehaztutako erabiltzaile izena (%s) lehendik existitzen zen (beste edozein aldaketa ezarri egingo da).';
+$lang['start'] = 'hasi';
+$lang['prev'] = 'aurrekoa';
+$lang['next'] = 'hurrengoa';
+$lang['last'] = 'azkena';
+$lang['edit_usermissing'] = 'Aukeratutako erabiltzailea ez da aurkitu, zehaztutako erabiltzaile izena beste nonbait ezabatua edo aldatua izana gerta zitekeen.';
+$lang['user_notify'] = 'Erabiltzailea jakinarazi';
+$lang['note_notify'] = 'Jakinarazpen postak erabiltzaileari pasahitz berria ematen bazaio bakarrik bidaltzen dira.';
+$lang['note_group'] = 'Erabiltzaile berriak (%s) talde lehenetsira gehituko dira ez bada talderik zehazten.';
+$lang['note_pass'] = 'Pasahitza automatikoki sortuko da eremua hutsik uzten bada eta erabiltzailearen jakinarazpena gaitua badago.';
+$lang['add_ok'] = 'Erabiltzailea arrakastaz gehitua';
+$lang['add_fail'] = 'Erabiltzaile gehitzeak huts egin du';
+$lang['notify_ok'] = 'Jakinarazpen posta-e bidalia';
+$lang['notify_fail'] = 'Jakinarazpen posta-e ezin izan da bidali';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/list.txt
new file mode 100644
index 000000000..fb80b14be
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/list.txt
@@ -0,0 +1 @@
+====== Erabiltzaile zerrenda ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/add.txt
new file mode 100644
index 000000000..32d604e43
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/add.txt
@@ -0,0 +1 @@
+===== اÙزودن کاربر ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/delete.txt
new file mode 100644
index 000000000..f8a59ff10
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/delete.txt
@@ -0,0 +1 @@
+===== حذ٠کاربر ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/edit.txt
new file mode 100644
index 000000000..33fe5b517
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/edit.txt
@@ -0,0 +1 @@
+===== ویرایش کاربر ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/intro.txt
new file mode 100644
index 000000000..ffb850109
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/intro.txt
@@ -0,0 +1 @@
+===== مدیریت کاربران ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/lang.php
new file mode 100644
index 000000000..f9e973b9c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/lang.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Persian language file
+ *
+ * @author behrad eslamifar <behrad_es@yahoo.com)
+ * @author Mohsen Firoozmandan <info@mambolearn.com>
+ * @author omidmr@gmail.com
+ * @author Omid Mottaghi <omidmr@gmail.com>
+ * @author Mohammad Reza Shoaei <shoaei@gmail.com>
+ */
+$lang['menu'] = 'مدیریت کاربر';
+$lang['noauth'] = '(معتبرسازی کاربر ممکن نیست)';
+$lang['nosupport'] = '(مدیریت کاربر پشتیبانی نمی‌شود)';
+$lang['badauth'] = 'روش معتبرسازی اشتباه است';
+$lang['user_id'] = 'کاربر';
+$lang['user_pass'] = 'گذرواژه';
+$lang['user_name'] = 'نام حقیقی';
+$lang['user_mail'] = 'ایمیل';
+$lang['user_groups'] = 'گروه‌ها';
+$lang['field'] = 'Ùیلد';
+$lang['value'] = 'ارزش';
+$lang['add'] = 'اضاÙÙ‡ کردن';
+$lang['delete'] = 'حذÙ';
+$lang['delete_selected'] = 'حذ٠انتخاب شده‌ها';
+$lang['edit'] = 'ویرایش';
+$lang['edit_prompt'] = 'ویرایش این کاربر';
+$lang['modify'] = 'ذخیره تغییرات';
+$lang['search'] = 'جستجو';
+$lang['search_prompt'] = 'انجام جستجو';
+$lang['clear'] = 'بازنویسی Ùیلترهای جستجو';
+$lang['filter'] = 'Ùیلتر';
+$lang['summary'] = 'نمایش کاربر %1$d-%2$d از %3$d. در کل %4$d کاربر.';
+$lang['nonefound'] = 'هیچ کاربری یاÙت نشد. در Ú©Ù„ %d کاربر.';
+$lang['delete_ok'] = '%d کاربر حذ٠شد';
+$lang['delete_fail'] = 'حذ٠%d کاربر با مشکل مواجه شد.';
+$lang['update_ok'] = 'کاربر با موÙقیت به روز رسانی شد.';
+$lang['update_fail'] = 'به روز رسانی کاربر با مشکل مواجه شد';
+$lang['update_exists'] = 'تغییر نام کاربری ممکن نیست، نام کاربری مورد نظر (%s) قبلن وجود داشته (مابقی تغییرات اعمال شده است)';
+$lang['start'] = 'شروع';
+$lang['prev'] = 'قبلی';
+$lang['next'] = 'بعدی';
+$lang['last'] = 'آخرین';
+$lang['edit_usermissing'] = 'کاربر انتخاب شده یاÙت نشد، نام کاربری مورد نظر در جایی دیگر حذ٠شده یا تغییر کرده.';
+$lang['user_notify'] = 'آگاه کردن کاربر';
+$lang['note_notify'] = 'ایمیلی برای آگاهی، Ùقط در زمان تغییر گذرواژه‌ ارسال می‌شود.';
+$lang['note_group'] = 'اگر گروهی انتخاب نشود، کاربران جدید به گروه پیش‌Ùرض (%s) اÙزوده خواهند شد.';
+$lang['note_pass'] = 'اگر Ùیلد گذرواژه خالی گذاشته شود، گذرواژه به طور خودکار تولید Ùˆ ایمیلی برای کاربر ارسال خواهد شد.';
+$lang['add_ok'] = 'کاربر با موÙقیت اÙزوده شد';
+$lang['add_fail'] = 'اÙزودن کاربر با مشکل مواجه شد';
+$lang['notify_ok'] = 'ایمیل آگاهی دهنده ارسال شد';
+$lang['notify_fail'] = 'ارسال ایمیل آگاهی دهنده با مشکل مواجه شد';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/list.txt
new file mode 100644
index 000000000..b539bf18a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/list.txt
@@ -0,0 +1 @@
+===== لیست کاربران ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/add.txt
new file mode 100644
index 000000000..5c4ee0a41
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/add.txt
@@ -0,0 +1 @@
+===== Lisää käyttäjä ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/delete.txt
new file mode 100644
index 000000000..2203a20f8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/delete.txt
@@ -0,0 +1 @@
+===== Poista käyttäjä ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/edit.txt
new file mode 100644
index 000000000..53e0b41ab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/edit.txt
@@ -0,0 +1 @@
+===== Muokkaa käyttäjää ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/intro.txt
new file mode 100644
index 000000000..2ef0bb509
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/intro.txt
@@ -0,0 +1 @@
+====== Käyttäjähallinta ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/lang.php
new file mode 100644
index 000000000..6eeb4c3e8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/lang.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Finnish language file
+ *
+ * @author otto@valjakko.net
+ * @author Otto Vainio <otto@valjakko.net>
+ * @author Teemu Mattila <ghcsystems@gmail.com>
+ */
+$lang['menu'] = 'Käyttäjähallinta';
+$lang['noauth'] = '(autentikointi ei ole käytössä)';
+$lang['nosupport'] = '(käyttäjähallinta ei ole tuettu)';
+$lang['badauth'] = 'Viallinen autentikointimenetelmä';
+$lang['user_id'] = 'Käyttäjä';
+$lang['user_pass'] = 'Salasana';
+$lang['user_name'] = 'Oikea nimi';
+$lang['user_mail'] = 'Sähköposti';
+$lang['user_groups'] = 'Ryhmät';
+$lang['field'] = 'Kenttä';
+$lang['value'] = 'Arvo';
+$lang['add'] = 'Lisää';
+$lang['delete'] = 'Poista';
+$lang['delete_selected'] = 'Poista valittu';
+$lang['edit'] = 'Muokkaa';
+$lang['edit_prompt'] = 'Muokkaa ryhmää';
+$lang['modify'] = 'Tallenna muutokset';
+$lang['search'] = 'Hae';
+$lang['search_prompt'] = 'Tee haku';
+$lang['clear'] = 'Tyhjennä hakusuodatin';
+$lang['filter'] = 'Suodatin';
+$lang['summary'] = 'Näytetään käyttäjät %1$d-%2$d / %3$d löytynyttä. %4$d käyttäjää yhteensä.';
+$lang['nonefound'] = 'Ei löytynyt käyttäjiä. %d käyttäjää yhteensä.';
+$lang['delete_ok'] = '%d käyttäjää poistettu';
+$lang['delete_fail'] = '%d poistoa epäonnistui';
+$lang['update_ok'] = 'Käyttäjän päivitys onnistui';
+$lang['update_fail'] = 'Käyttäjän päivitys epäonnistui';
+$lang['update_exists'] = 'Käyttäjän nimen vaihto epäonnistui. Nimi (%s) on jo olemassa (muut muutokset onnistuivat)';
+$lang['start'] = 'alku';
+$lang['prev'] = 'edellinen';
+$lang['next'] = 'seuraava';
+$lang['last'] = 'viimeinen';
+$lang['edit_usermissing'] = 'Valittua käyttäjää ei löytynyt. Käyttäjä on voitu päivittää tai poistaa muualta.';
+$lang['user_notify'] = 'Tiedota käyttäjälle';
+$lang['note_notify'] = 'Tiedotus lähetetään vain, jos käyttäjälle on määritelty uusi salasana.';
+$lang['note_group'] = 'Uudelle käyttäjälle määritellään oletusryhmä (%s), jos ryhmää ei erikseen määritellä.';
+$lang['note_pass'] = 'Salasana luodaan automaattisesti, mikäli kenttä jätetään tyhjäksi ja jos käyttäjän tiedotus on päällä.';
+$lang['add_ok'] = 'Käyttäjä lisätty onnistuneesti';
+$lang['add_fail'] = 'Käyttäjän lisäys epäonnistui';
+$lang['notify_ok'] = 'Ilmoitus sähköpostilla lähetetty';
+$lang['notify_fail'] = 'Ilmoitusta sähköpostilla ei voitu lähettää';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/list.txt
new file mode 100644
index 000000000..5ecf2ff7b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/list.txt
@@ -0,0 +1 @@
+===== Käyttäjälista ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/add.txt
new file mode 100644
index 000000000..e60b8b894
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/add.txt
@@ -0,0 +1 @@
+===== Ajouter un utilisateur =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/delete.txt
new file mode 100644
index 000000000..778f44192
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/delete.txt
@@ -0,0 +1 @@
+===== Supprimer un utilisateur =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/edit.txt
new file mode 100644
index 000000000..ec193eb5a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/edit.txt
@@ -0,0 +1 @@
+===== Modifier les informations d'un utilisateur =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/intro.txt
new file mode 100644
index 000000000..84987b0bf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/intro.txt
@@ -0,0 +1 @@
+====== Gestion des utilisateurs ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/lang.php
new file mode 100644
index 000000000..9229ee8e8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/lang.php
@@ -0,0 +1,55 @@
+<?php
+/**
+ * french language file
+ *
+ * @author Guy Brand <gb@isis.u-strasbg.fr>
+ * @author Delassaux Julien <julien@delassaux.fr>
+ * @author Maurice A. LeBlanc <leblancma@cooptel.qc.ca>
+ * @author gb@isis.u-strasbg.fr
+ * @author stephane.gully@gmail.com
+ * @author Guillaume Turri <guillaume.turri@gmail.com>
+ * @author Erik Pedersen <erik.pedersen@shaw.ca>
+ * @author olivier duperray <duperray.olivier@laposte.net>
+ * @author Vincent Feltz <psycho@feltzv.fr>
+ */
+$lang['menu'] = 'Gestion des utilisateurs';
+$lang['noauth'] = '(authentification utilisateur non disponible)';
+$lang['nosupport'] = '(gestion utilisateur non supportée)';
+$lang['badauth'] = 'mécanisme d\'authentification invalide';
+$lang['user_id'] = 'Identifiant ';
+$lang['user_pass'] = 'Mot de passe ';
+$lang['user_name'] = 'Nom ';
+$lang['user_mail'] = 'Courriel ';
+$lang['user_groups'] = 'Groupes ';
+$lang['field'] = 'Champ';
+$lang['value'] = 'Valeur';
+$lang['add'] = 'Ajouter';
+$lang['delete'] = 'Supprimer';
+$lang['delete_selected'] = 'Supprimer la sélection';
+$lang['edit'] = 'Éditer';
+$lang['edit_prompt'] = 'Éditer cet utilisateur';
+$lang['modify'] = 'Enregistrer les modifications';
+$lang['search'] = 'Rechercher';
+$lang['search_prompt'] = 'Effectuer la recherche';
+$lang['clear'] = 'Réinitialiser la recherche';
+$lang['filter'] = 'Filtre';
+$lang['summary'] = 'Affichage des utilisateurs %1$d-%2$d parmi %3$d trouvé(s). %4$d utilisateur(s) au total.';
+$lang['nonefound'] = 'Aucun utilisateur trouvé. %d utilisateur(s) au total.';
+$lang['delete_ok'] = '%d utilisateurs effacés';
+$lang['delete_fail'] = '%d effacement échoué.';
+$lang['update_ok'] = 'utilisateur mis à jour avec succès';
+$lang['update_fail'] = 'échec de la mise à jour utilisateur';
+$lang['update_exists'] = 'échec du changement de nom d\'utilisateur, le nom spécifié (%s) existe déjà (toutes les autres modifications seront effectuées).';
+$lang['start'] = 'Démarrage';
+$lang['prev'] = 'Précédent';
+$lang['next'] = 'Suivant';
+$lang['last'] = 'Dernier';
+$lang['edit_usermissing'] = 'Utilisateur sélectionné non trouvé, cet utilisateur a peut-être été supprimé ou modifié ailleurs.';
+$lang['user_notify'] = 'Notifier l\'utilisateur ';
+$lang['note_notify'] = 'Envoi de notification par courriel uniquement lorsqu\'un nouveau mot de passe est attribué à l\'utilisateur.';
+$lang['note_group'] = 'Les nouveaux utilisateurs seront ajoutés au groupe par défaut (%s) si aucun groupe n\'est spécifié.';
+$lang['note_pass'] = 'Le mot de passe sera généré automatiquement si le champ est laissé vide et si la notification de l\'utilisateur est activée.';
+$lang['add_ok'] = 'Utilisateur ajouté avec succès';
+$lang['add_fail'] = 'Échec de l\'ajout de l\'utilisateur';
+$lang['notify_ok'] = 'Courriel de notification expédié';
+$lang['notify_fail'] = 'Échec de l\'expédition du courriel de notification';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/list.txt
new file mode 100644
index 000000000..2d708fe43
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/list.txt
@@ -0,0 +1 @@
+===== Liste des utilisateurs =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/add.txt
new file mode 100644
index 000000000..cd1c487ff
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/add.txt
@@ -0,0 +1 @@
+===== Engadir unha persoa usuaria =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/delete.txt
new file mode 100644
index 000000000..f13133d6f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/delete.txt
@@ -0,0 +1 @@
+===== Eliminar unha persoa usuaria =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/edit.txt
new file mode 100644
index 000000000..d33f9c335
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/edit.txt
@@ -0,0 +1 @@
+===== Editar unha persoa usuaria =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/intro.txt
new file mode 100644
index 000000000..9b05a0c5e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/intro.txt
@@ -0,0 +1 @@
+====== Xestor de persoas usuarias ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/lang.php
new file mode 100644
index 000000000..b6909c100
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/lang.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Galicianlanguage file
+ *
+ * @author CiberIrmandade da Fala <infoxeral@ciberirmandade.org>
+ * @author Tagen Ata <localizacion@tagenata.com>
+ * @author Leandro Regueiro <leandro.regueiro@gmail.com>
+ */
+$lang['menu'] = 'Xestor de persoas usuarias';
+$lang['noauth'] = '(a autenticación de persoas usuarias non está dispoñíbel)';
+$lang['nosupport'] = '(a xestión de persoas usuarias non está soportada)';
+$lang['badauth'] = 'o mecanismo de autenticación non é válido';
+$lang['user_id'] = 'Usuaria/o';
+$lang['user_pass'] = 'Contrasinal';
+$lang['user_name'] = 'Nome real';
+$lang['user_mail'] = 'Correo';
+$lang['user_groups'] = 'Grupos';
+$lang['field'] = 'Campo';
+$lang['value'] = 'Valor';
+$lang['add'] = 'Engadir';
+$lang['delete'] = 'Eliminar';
+$lang['delete_selected'] = 'Eliminar as seleccionadas';
+$lang['edit'] = 'Editar';
+$lang['edit_prompt'] = 'Editar esta persoa usuaria';
+$lang['modify'] = 'Gardar os cambios';
+$lang['search'] = 'Procurar';
+$lang['search_prompt'] = 'Facer unha procura';
+$lang['clear'] = 'Reiniciar o filtro de procura';
+$lang['filter'] = 'Filtro';
+$lang['summary'] = 'A mostrar as persoas usuarias %1$d-%2$d de %3$d encontradas. %4$d persoas usuarias en total.';
+$lang['nonefound'] = 'Non se encontraron persoas usuarias. %d persoas usuarias en total.';
+$lang['delete_ok'] = '%d persoas usuarias foron eliminadas';
+$lang['delete_fail'] = '%d non puideron ser eliminadas.';
+$lang['update_ok'] = 'A persoa usuaria foi actualizada correctamente';
+$lang['update_fail'] = 'Non se puido actualizar a persoa usuaria';
+$lang['update_exists'] = 'Non se puido mudar o nome da persoa usuaria; o nome especificado (%s) xa existe (o resto de cambios aplicaranse sen problemas).';
+$lang['start'] = 'comezo';
+$lang['prev'] = 'anterior';
+$lang['next'] = 'seguinte';
+$lang['last'] = 'última';
+$lang['edit_usermissing'] = 'Non se encontrou a persoa usuaria seleccionada; pode que o nome de usuaria/o teña sido eliminado ou alterado nalgún momento.';
+$lang['user_notify'] = 'Notificar á/ao usuaria/o';
+$lang['note_notify'] = 'Os correos de notificación envíanse só se a persoa usuaria obtén un contrasinal novo.';
+$lang['note_group'] = 'As persoas usuarias novas serán engadidas ao grupo predeterminado (%s) se non se especifica outro.';
+$lang['note_pass'] = 'Se deixa o campo baleiro e a notificación á/ao usuaria/o está activada, xerarase automaticamente o contrasinal.';
+$lang['add_ok'] = 'A persoa usuaria foi engadida correctamente';
+$lang['add_fail'] = 'Non se puido engadir a/o usuaria/o';
+$lang['notify_ok'] = 'O correo de notificación foi enviado';
+$lang['notify_fail'] = 'Non se puido enviar o correo de notificación';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/list.txt
new file mode 100644
index 000000000..792afd7d1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/list.txt
@@ -0,0 +1 @@
+===== Listaxe de persoas usuarias =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/add.txt
new file mode 100644
index 000000000..e2d1cb775
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/add.txt
@@ -0,0 +1 @@
+===== הוספת משתמש =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/delete.txt
new file mode 100644
index 000000000..42d738b1d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/delete.txt
@@ -0,0 +1 @@
+===== מחיקת משתמש =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/edit.txt
new file mode 100644
index 000000000..af90af359
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/edit.txt
@@ -0,0 +1 @@
+===== עריכת משתמש =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/intro.txt
new file mode 100644
index 000000000..232c5153b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/intro.txt
@@ -0,0 +1 @@
+====== מנהל ×ž×©×ª×ž×©×™× ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/lang.php
new file mode 100644
index 000000000..85f5274e8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/lang.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * hebrew language file
+ *
+ * @author DoK <kamberd@yahoo.com>
+ * @author Dotan Kamber <kamberd@yahoo.com>
+ * @author Moshe Kaplan <mokplan@gmail.com>
+ */
+$lang['menu'] = 'מנהל משתמשי×';
+$lang['noauth'] = '(×ימות ×ž×©×ª×ž×©×™× ×ינו זמין)';
+$lang['nosupport'] = '(ניהול ×ž×©×ª×ž×©×™× ×ינו נתמך)';
+$lang['badauth'] = 'מנגנון ×ימות ×œ× ×ª×§×£';
+$lang['user_id'] = '×©× ×ž×©×ª×ž×©';
+$lang['user_pass'] = 'סיסמה';
+$lang['user_name'] = '×©× ×מיתי';
+$lang['user_mail'] = 'דו×"ל';
+$lang['user_groups'] = 'קבוצות';
+$lang['field'] = 'שדה';
+$lang['value'] = 'ערך';
+$lang['add'] = 'הוספה';
+$lang['delete'] = 'מחיקה';
+$lang['delete_selected'] = 'מחיקת הבחירה';
+$lang['edit'] = 'עריכה';
+$lang['edit_prompt'] = 'עריכת משתמש זה';
+$lang['modify'] = 'שמירת שינוי×';
+$lang['search'] = 'חיפוש';
+$lang['search_prompt'] = 'בצע חיפוש';
+$lang['clear'] = '×תחל סינון חיפוש';
+$lang['filter'] = 'סינון';
+$lang['summary'] = 'מציג ×ž×©×ª×ž×©×™× %1$d-%2$d מתוך %3$d שנמצ×ו. %4$d בסך הכל.';
+$lang['nonefound'] = '×œ× × ×ž×¦×ו משתמשי×. סך כל ×”×ž×©×ª×ž×©×™× %d.';
+$lang['delete_ok'] = '%d ×ž×©×ª×ž×©×™× × ×ž×—×§×•';
+$lang['delete_fail'] = '%d כשל במחיקה.';
+$lang['update_ok'] = 'משתמש עודכן בהצלחה';
+$lang['update_fail'] = 'עידכון המשתמש כשל';
+$lang['update_exists'] = 'שינוי ×©× ×”×ž×©×ª×ž×© כשל, ×©× ×”×©×ž×ª×ž×© שצויין (%s) כבר × ×ž×¦× (כל ×”×©×™× ×•×™×™× ×”××—×¨×™× ×™×•×—×œ×•).';
+$lang['start'] = 'התחלה';
+$lang['prev'] = 'קוד×';
+$lang['next'] = 'הב×';
+$lang['last'] = 'סוף';
+$lang['edit_usermissing'] = 'המשתמש שנבחר ×œ× × ×ž×¦×, ייתכן ×›×™ ×©× ×”×ž×©×ª×ž×© שצויין נמחק ×ו השתנה ×‘×ž×§×•× ×חר.';
+$lang['user_notify'] = 'הודע למשתמש';
+$lang['note_notify'] = 'הודעות בדו×"ל נשלחות רק במקרה שהמשתמש מקבל סיסמה חדשה.';
+$lang['note_group'] = '×ž×©×ª×ž×©×™× ×—×“×©×™× ×™×•×¡×¤×• לקבוצת ברירת המחדל (%s) ×× ×œ× ×¦×•×™× ×” קבוצה ×חרת.';
+$lang['add_ok'] = 'משתמש הוסף בהצלחה';
+$lang['add_fail'] = 'הוספת המשתמש כשלה';
+$lang['notify_ok'] = 'הודעה נשלחה';
+$lang['notify_fail'] = '×œ× × ×™×ª×Ÿ ×”×™×” לשלוח הודעה';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/list.txt
new file mode 100644
index 000000000..9308fbebb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/list.txt
@@ -0,0 +1 @@
+===== רשימת ×ž×©×ª×ž×©×™× =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hi/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hi/lang.php
new file mode 100644
index 000000000..d8630a281
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hi/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * Hindi language file
+ *
+ * @author Abhinav Tyagi <abhinavtyagi11@gmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hr/lang.php
new file mode 100644
index 000000000..d2094b77b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hr/lang.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * Croatian language file
+ *
+ * @author Branko Rihtman <theney@gmail.com>
+ * @author Dražen Odobašić <dodobasic@gmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/add.txt
new file mode 100644
index 000000000..70a44c41d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/add.txt
@@ -0,0 +1,2 @@
+===== Felhasználó hozzáadása =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/delete.txt
new file mode 100644
index 000000000..963d2e7b3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/delete.txt
@@ -0,0 +1,2 @@
+===== Felhasználó törlése =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/edit.txt
new file mode 100644
index 000000000..f82746094
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/edit.txt
@@ -0,0 +1,2 @@
+===== Felhasználó szerkesztése =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/intro.txt
new file mode 100644
index 000000000..150aff848
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/intro.txt
@@ -0,0 +1,2 @@
+====== Felhasználók kezelése ======
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/lang.php
new file mode 100644
index 000000000..b9f35cfc7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/lang.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Hungarian language file
+ *
+ * @author Sandor TIHANYI <stihanyi+dw@gmail.com>
+ * @author Siaynoq Mage <siaynoqmage@gmail.com>
+ * @author schilling.janos@gmail.com
+ */
+$lang['menu'] = 'Felhasználók kezelése';
+$lang['noauth'] = '(A felhasználói azonosítás nem működik.)';
+$lang['nosupport'] = '(A felhasználók kezelése nem támogatott.)';
+$lang['badauth'] = 'nem érvényes autentikációs technika';
+$lang['user_id'] = 'Felhasználó azonosító';
+$lang['user_pass'] = 'Jelszó';
+$lang['user_name'] = 'Név';
+$lang['user_mail'] = 'E-mail';
+$lang['user_groups'] = 'Csoportok';
+$lang['field'] = 'Mező';
+$lang['value'] = 'Érték';
+$lang['add'] = 'Hozzáadás';
+$lang['delete'] = 'Törlés';
+$lang['delete_selected'] = 'Kiválasztottak törlése';
+$lang['edit'] = 'Szerkesztés';
+$lang['edit_prompt'] = 'A felhasználó szerkesztése';
+$lang['modify'] = 'Változások mentése';
+$lang['search'] = 'Keresés';
+$lang['search_prompt'] = 'Keresés';
+$lang['clear'] = 'Keresési szűrés törlése';
+$lang['filter'] = 'Szűrés';
+$lang['summary'] = '%1$d-%2$d. felhasználókat mutatom a(z) %3$d megtalált felhasználóból. %4$d felhasználó van összesen.';
+$lang['nonefound'] = 'Nem találtam ilyen felhasználót. %d felhasználó van összesen.';
+$lang['delete_ok'] = '%d felhasználó törölve.';
+$lang['delete_fail'] = '%d felhasználót nem sikerült törölni.';
+$lang['update_ok'] = 'A felhasználó adatait sikeresen elmentettem.';
+$lang['update_fail'] = 'A felhasználó adatainak mentése nem sikerült.';
+$lang['update_exists'] = 'A felhasználói azonosító változtatása nem sikerült, a megadott azonosító (%s) már létezik. (A többi változtatás mentve.)';
+$lang['start'] = 'első';
+$lang['prev'] = 'előző';
+$lang['next'] = 'következő';
+$lang['last'] = 'utolsó';
+$lang['edit_usermissing'] = 'A kiválasztott felhasználót nem találom, a felhasználói nevét törölték vagy megváltoztatták.';
+$lang['user_notify'] = 'Felhasználó értesítése';
+$lang['note_notify'] = 'Csak akkor küld értesítő e-mailt, ha a felhasználó új jelszót kapott.';
+$lang['note_group'] = 'Ha nincs csoport meghatározva, az új felhasználó az alapértelmezett csoportba (%s) kerül.';
+$lang['note_pass'] = 'Ha a baloldali mező üres, és a felhasználó értesítés aktív, akkor generált jelszó lesz.';
+$lang['add_ok'] = 'A felhasználó sikeresen hozzáadva.';
+$lang['add_fail'] = 'A felhasználó hozzáadása nem sikerült.';
+$lang['notify_ok'] = 'Értesítő levél elküldve.';
+$lang['notify_fail'] = 'Nem sikerült az értesítő levelet elküldeni.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/list.txt
new file mode 100644
index 000000000..9da7320c6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/list.txt
@@ -0,0 +1,2 @@
+===== Felhasználók listája =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id-ni/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id-ni/lang.php
new file mode 100644
index 000000000..d367340b7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id-ni/lang.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * idni language file
+ *
+ * @author Harefa <fidelis@harefa.com>
+ * @author Yustinus Waruwu <juswaruwu@gmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/add.txt
new file mode 100644
index 000000000..eae407c04
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/add.txt
@@ -0,0 +1 @@
+===== Tambah User ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/delete.txt
new file mode 100644
index 000000000..99e53c9ef
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/delete.txt
@@ -0,0 +1 @@
+===== Hapus User ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/edit.txt
new file mode 100644
index 000000000..6d14f4fde
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/edit.txt
@@ -0,0 +1 @@
+===== Edit User ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/intro.txt
new file mode 100644
index 000000000..de053f2ae
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/intro.txt
@@ -0,0 +1 @@
+===== Manajemen User ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/lang.php
new file mode 100644
index 000000000..457ad4963
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/lang.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Indonesian language file
+ *
+ * @author Irwan Butar Butar <irwansah.putra@gmail.com>
+ * @author Yustinus Waruwu <juswaruwu@gmail.com>
+ */
+$lang['menu'] = 'Manajemen User';
+$lang['noauth'] = '(autentikasi tidak tersedia)';
+$lang['nosupport'] = '(manajemen user tidak didukung)';
+$lang['badauth'] = 'mekanisme autentikasi invali';
+$lang['user_id'] = 'User';
+$lang['user_pass'] = 'Password';
+$lang['user_name'] = 'Nama Lengkap';
+$lang['user_mail'] = 'Email';
+$lang['user_groups'] = 'Grup';
+$lang['field'] = 'Field';
+$lang['value'] = 'Nilai';
+$lang['add'] = 'Tambah';
+$lang['delete'] = 'Hapus';
+$lang['delete_selected'] = 'Hapus pilihan';
+$lang['edit'] = 'Edit';
+$lang['edit_prompt'] = 'Edit user ini';
+$lang['modify'] = 'Simpan Perubahan';
+$lang['search'] = 'Pencarian';
+$lang['search_prompt'] = 'Lakukan pencarian';
+$lang['clear'] = 'Reset Filter Pencarian';
+$lang['filter'] = 'Filter';
+$lang['summary'] = 'Menampilkan user %1$d-%2$d dari %3$d user yang ditemukan. Total semua user %4$d.';
+$lang['nonefound'] = 'User tidak ditemukan. Total semua user %d. ';
+$lang['delete_ok'] = 'User %d dihapus';
+$lang['delete_fail'] = 'User %d tidak berhasil dihapus';
+$lang['update_ok'] = 'User berhasil diubah';
+$lang['update_fail'] = 'Perubahan user tidak berhasil';
+$lang['update_exists'] = 'Perubahan username tidak berhasil, Username (%s) sudah ada (perubahan lain tetap dilakukan)';
+$lang['start'] = 'awal';
+$lang['prev'] = 'sebelumnya';
+$lang['next'] = 'berikutnya';
+$lang['last'] = 'terakhir';
+$lang['edit_usermissing'] = 'User yang dipilih tida ditemukan, username tersebut mungkin sudah dihapus atau diubah ditempat lain.';
+$lang['user_notify'] = 'Beritahu user';
+$lang['note_notify'] = 'Email notifikasi hanya dikirim jika user diberikan password baru';
+$lang['note_group'] = 'User baru akan ditambahkan ke grup default (%s) jika tidak ada grup yang diisi.';
+$lang['add_ok'] = 'User telah berhasil ditambahkan';
+$lang['add_fail'] = 'Penambahan user tidak berhasil.';
+$lang['notify_ok'] = 'Email notifikasi berhasil terkirim.';
+$lang['notify_fail'] = 'Email notifikasi tidak berhasil terkirim.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/list.txt
new file mode 100644
index 000000000..9b70bc157
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/list.txt
@@ -0,0 +1 @@
+===== Daftar User ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/is/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/is/delete.txt
new file mode 100644
index 000000000..564006584
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/is/delete.txt
@@ -0,0 +1 @@
+===== Eyða notanda ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/is/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/is/lang.php
new file mode 100644
index 000000000..cabf83d64
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/is/lang.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Icelandic language file
+ *
+ * @author Hrannar Baldursson <hrannar.baldursson@gmail.com>
+ * @author Ólafur Gunnlaugsson <oli@audiotools.com>
+ * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
+ */
+$lang['user_id'] = 'Notandi';
+$lang['user_pass'] = 'Aðgangsorð';
+$lang['user_name'] = 'Raunnafn';
+$lang['user_groups'] = 'Hópar';
+$lang['field'] = 'Svæði';
+$lang['delete'] = 'Eyða';
+$lang['add_ok'] = 'Notandinn var bætt við';
+$lang['add_fail'] = 'Bæta við nýjum notanda mistókst';
+$lang['notify_ok'] = 'Tilkynning var sendast með tölvupósti';
+$lang['notify_fail'] = 'Ekki hægt að senda tilkynning með tölvupósti';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/add.txt
new file mode 100644
index 000000000..9ce4c6e38
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/add.txt
@@ -0,0 +1 @@
+===== Aggiungi utente =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/delete.txt
new file mode 100644
index 000000000..fc36212af
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/delete.txt
@@ -0,0 +1 @@
+===== Cancella utente =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/edit.txt
new file mode 100644
index 000000000..39767bfdc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/edit.txt
@@ -0,0 +1 @@
+===== Modifica utente =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/intro.txt
new file mode 100644
index 000000000..3421709d6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/intro.txt
@@ -0,0 +1 @@
+====== Gestione Utenti ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/lang.php
new file mode 100644
index 000000000..67b17e9ec
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/lang.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Italian language file
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @author Silvia Sargentoni <polinnia@tin.it>
+ * @author Pietro Battiston toobaz@email.it
+ * @author Diego Pierotto ita.translations@tiscali.it
+ * @author ita.translations@tiscali.it
+ * @author Lorenzo Breda <lbreda@gmail.com>
+ * @author snarchio@alice.it
+ * @author robocap <robocap1@gmail.com>
+ */
+$lang['menu'] = 'Gestione Utenti';
+$lang['noauth'] = '(autenticazione non disponibile)';
+$lang['nosupport'] = '(gestione utenti non supportata)';
+$lang['badauth'] = 'sistema di autenticazione non valido';
+$lang['user_id'] = 'User ID';
+$lang['user_pass'] = 'Password';
+$lang['user_name'] = 'Nome completo';
+$lang['user_mail'] = 'E-mail';
+$lang['user_groups'] = 'Gruppi';
+$lang['field'] = 'Campo';
+$lang['value'] = 'Valore';
+$lang['add'] = 'Aggiungi';
+$lang['delete'] = 'Cancella';
+$lang['delete_selected'] = 'Cancella selezionati';
+$lang['edit'] = 'Modifica';
+$lang['edit_prompt'] = 'Modifica questo utente';
+$lang['modify'] = 'Salva modifiche';
+$lang['search'] = 'Cerca';
+$lang['search_prompt'] = 'Esegui ricerca';
+$lang['clear'] = 'Azzera filtro di ricerca';
+$lang['filter'] = 'Filtro';
+$lang['summary'] = 'Visualizzazione utenti %1$d-%2$d di %3$d trovati. %4$d utenti totali.';
+$lang['nonefound'] = 'Nessun utente trovato. %d utenti totali.';
+$lang['delete_ok'] = '%d utenti cancellati';
+$lang['delete_fail'] = 'Cancellazione %d fallita.';
+$lang['update_ok'] = 'Aggiornamento utente riuscito';
+$lang['update_fail'] = 'Aggiornamento utente fallito';
+$lang['update_exists'] = 'Modifica nome utente fallita, il nome utente specificato (%s) esiste già (qualunque altra modifica sarà applicata).';
+$lang['start'] = 'primo';
+$lang['prev'] = 'precedente';
+$lang['next'] = 'successivo';
+$lang['last'] = 'ultimo';
+$lang['edit_usermissing'] = 'Utente selezionato non trovato, il nome utente specificato potrebbe essere stato cancellato o modificato altrove.';
+$lang['user_notify'] = 'Notifica utente';
+$lang['note_notify'] = 'Le email di notifica sono inviate soltanto se all\'utente è stata assegnata una nuova password.';
+$lang['note_group'] = 'Se non si specifica alcun gruppo, i nuovi utenti saranno aggiunti al gruppo di default (%s).';
+$lang['note_pass'] = 'La password verrà generata automaticamente qualora il campo di inserimento relatvivo venisse lasciato vuoto e le notifiche all\'utente fossero abilitate.';
+$lang['add_ok'] = 'Utente aggiunto correttamente';
+$lang['add_fail'] = 'Aggiunta utente fallita';
+$lang['notify_ok'] = 'Email di notifica inviata';
+$lang['notify_fail'] = 'L\'email di notifica non può essere inviata';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/list.txt
new file mode 100644
index 000000000..91e27a9de
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/list.txt
@@ -0,0 +1 @@
+===== Elenco Utenti =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/add.txt
new file mode 100644
index 000000000..87b30e0a0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/add.txt
@@ -0,0 +1 @@
+===== ãƒ¦ãƒ¼ã‚¶ãƒ¼ä½œæˆ =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/delete.txt
new file mode 100644
index 000000000..67ef23e23
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/delete.txt
@@ -0,0 +1 @@
+===== ユーザー削除 =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/edit.txt
new file mode 100644
index 000000000..e7695e307
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/edit.txt
@@ -0,0 +1 @@
+===== ユーザー編集 =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/intro.txt
new file mode 100644
index 000000000..5dbe51c8c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/intro.txt
@@ -0,0 +1 @@
+====== ãƒ¦ãƒ¼ã‚¶ãƒ¼ç®¡ç† ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/lang.php
new file mode 100644
index 000000000..321bbafe8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/lang.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * japanese language file
+ * @author Yuji Takenaka <webmaster@davilin.com>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @author Ikuo Obataya <i.obataya@gmail.com>
+ * @author Daniel Dupriest <kououken@gmail.com>
+ * @author Kazutaka Miyasaka <kazmiya@gmail.com>
+ */
+$lang['menu'] = 'ユーザー管ç†';
+$lang['noauth'] = '(ユーザーèªè¨¼ãŒç„¡åŠ¹ã§ã™ï¼‰';
+$lang['nosupport'] = '(ユーザー管ç†ã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“)';
+$lang['badauth'] = 'èªè¨¼ã®ãƒ¡ã‚«ãƒ‹ã‚ºãƒ ãŒç„¡åŠ¹ã§ã™';
+$lang['user_id'] = 'ユーザー';
+$lang['user_pass'] = 'パスワード';
+$lang['user_name'] = 'æ°å';
+$lang['user_mail'] = 'メールアドレス';
+$lang['user_groups'] = 'グループ';
+$lang['field'] = 'é …ç›®';
+$lang['value'] = '値';
+$lang['add'] = '追加';
+$lang['delete'] = '削除';
+$lang['delete_selected'] = 'é¸æŠžã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’削除';
+$lang['edit'] = '編集';
+$lang['edit_prompt'] = 'ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’編集';
+$lang['modify'] = '変更をä¿å­˜';
+$lang['search'] = '検索';
+$lang['search_prompt'] = '検索を実行';
+$lang['clear'] = '検索フィルターをリセット';
+$lang['filter'] = 'フィルター';
+$lang['summary'] = 'ユーザー %1$d-%2$d / %3$d, ç·ãƒ¦ãƒ¼ã‚¶ãƒ¼æ•° %4$d';
+$lang['nonefound'] = 'ユーザーãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“, ç·ãƒ¦ãƒ¼ã‚¶ãƒ¼æ•° %d';
+$lang['delete_ok'] = '%d ユーザーãŒå‰Šé™¤ã•ã‚Œã¾ã—ãŸ';
+$lang['delete_fail'] = '%d ユーザーã®å‰Šé™¤ã«å¤±æ•—ã—ã¾ã—ãŸ';
+$lang['update_ok'] = 'ユーザーã¯æ›´æ–°ã•ã‚Œã¾ã—ãŸ';
+$lang['update_fail'] = 'ユーザーã®æ›´æ–°ã«å¤±æ•—ã—ã¾ã—ãŸ';
+$lang['update_exists'] = 'ユーザーå(%s)ã¯æ—¢ã«å­˜åœ¨ã™ã‚‹ãŸã‚ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼åã®å¤‰æ›´ã«å¤±æ•—ã—ã¾ã—ãŸï¼ˆãã®ä»–ã®é …ç›®ã¯å¤‰æ›´ã•ã‚Œã¾ã—ãŸï¼‰ã€‚';
+$lang['start'] = '最åˆ';
+$lang['prev'] = 'å‰ã¸';
+$lang['next'] = '次ã¸';
+$lang['last'] = '最後';
+$lang['edit_usermissing'] = 'é¸æŠžã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。削除もã—ãã¯å¤‰æ›´ã•ã‚ŒãŸå¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚';
+$lang['user_notify'] = '通知ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼';
+$lang['note_notify'] = 'ユーザーãŒæ–°ã—ã„パスワードを設定ã—ãŸå ´åˆã®ã¿ã€é€šçŸ¥ãƒ¡ãƒ¼ãƒ«ãŒé€ä¿¡ã•ã‚Œã¾ã™ã€‚';
+$lang['note_group'] = 'グループを指定ã—ãªã„å ´åˆã¯ã€æ—¢å®šã®ã‚°ãƒ«ãƒ¼ãƒ—(%s)ã«ç™»éŒ²ã•ã‚Œã„ã¾ã™ã€‚';
+$lang['note_pass'] = 'パスワードを空欄ã¨ã—ãŸå ´åˆã¯ã€ãƒ‘スワードを自動的ã«ç”Ÿæˆã—ã¾ã™ã€‚ã“ã®å ´åˆã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¸ã®é€šçŸ¥ãŒæœ‰åŠ¹ã¨ãªã‚Šã¾ã™ã€‚';
+$lang['add_ok'] = 'ユーザーを登録ã—ã¾ã—ãŸ';
+$lang['add_fail'] = 'ユーザーã®ç™»éŒ²ã«å¤±æ•—ã—ã¾ã—ãŸ';
+$lang['notify_ok'] = '通知メールをé€ä¿¡ã—ã¾ã—ãŸ';
+$lang['notify_fail'] = '通知メールをé€ä¿¡ã§ãã¾ã›ã‚“ã§ã—ãŸ';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/list.txt
new file mode 100644
index 000000000..182cc198c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/list.txt
@@ -0,0 +1 @@
+===== ユーザーリスト =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/add.txt
new file mode 100644
index 000000000..578ba5636
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/add.txt
@@ -0,0 +1 @@
+===== ì‚¬ìš©ìž ì¶”ê°€ =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/delete.txt
new file mode 100644
index 000000000..1e9c0ba73
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/delete.txt
@@ -0,0 +1 @@
+===== ì‚¬ìš©ìž ì‚­ì œ =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/edit.txt
new file mode 100644
index 000000000..b8b13c5c8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/edit.txt
@@ -0,0 +1 @@
+===== ì‚¬ìš©ìž ì •ë³´ 수정 =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/intro.txt
new file mode 100644
index 000000000..8c8bfa5b9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/intro.txt
@@ -0,0 +1 @@
+====== ì‚¬ìš©ìž ê´€ë¦¬ ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/lang.php
new file mode 100644
index 000000000..eeb8eb791
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/lang.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * korean language file
+ *
+ * @author jk Lee
+ * @author dongnak@gmail.com
+ * @author Song Younghwan <purluno@gmail.com>
+ * @author SONG Younghwan <purluno@gmail.com>
+ */
+$lang['menu'] = 'ì‚¬ìš©ìž ê´€ë¦¬ìž';
+$lang['noauth'] = '(ì‚¬ìš©ìž ì¸ì¦ì´ 불가능합니다.)';
+$lang['nosupport'] = '(ì‚¬ìš©ìž ê´€ë¦¬ê°€ 지ì›ë˜ì§€ 않습니다.)';
+$lang['badauth'] = '유효하지 ì•Šì€ ì¸ì¦ 메카니즘입니다.';
+$lang['user_id'] = '사용ìž';
+$lang['user_pass'] = '패스워드';
+$lang['user_name'] = '실제 ì´ë¦„';
+$lang['user_mail'] = 'ì´ë©”ì¼ ';
+$lang['user_groups'] = '그룹들';
+$lang['field'] = '항목';
+$lang['value'] = 'ê°’';
+$lang['add'] = '추가';
+$lang['delete'] = '삭제';
+$lang['delete_selected'] = 'ì‚­ì œ ì„ íƒ';
+$lang['edit'] = '수정';
+$lang['edit_prompt'] = 'ì´ ì‚¬ìš©ìž ìˆ˜ì •';
+$lang['modify'] = '변경 저장';
+$lang['search'] = '검색';
+$lang['search_prompt'] = '검색 실행';
+$lang['clear'] = '검색 필터 초기화';
+$lang['filter'] = 'í•„í„°';
+$lang['summary'] = 'ê²€ìƒ‰ëœ ì‚¬ìš©ìžë“¤ 보기(%1$d-%2$d 중 %3$d). ì „ì²´ ì‚¬ìš©ìž %4$d 명.';
+$lang['nonefound'] = 'ê²€ìƒ‰ëœ ì‚¬ìš©ìžê°€ 없습니다. ì „ì²´ ì‚¬ìš©ìž %d 명.';
+$lang['delete_ok'] = '%d ëª…ì˜ ì‚¬ìš©ìžê°€ ì‚­ì œë˜ì—ˆìŠµë‹ˆë‹¤.';
+$lang['delete_fail'] = '%d ëª…ì˜ ì‚¬ìš©ìžì˜ 삭제가 실패했습니다.';
+$lang['update_ok'] = 'ì‚¬ìš©ìž ê°±ì‹ ì´ ì„±ê³µí–ˆìŠµë‹ˆë‹¤.';
+$lang['update_fail'] = 'ì‚¬ìš©ìž ê°±ì‹ ì´ ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤.';
+$lang['update_exists'] = 'ì‚¬ìš©ìž ì´ë¦„ ë³€ê²½ì´ ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤. ì‚¬ìš©ìž ì´ë¦„(%s)ì´ ì´ë¯¸ 존재합니다. (다른 í•­ëª©ë“¤ì˜ ë³€ê²½ì€ ì ìš©ë©ë‹ˆë‹¤.)';
+$lang['start'] = '시작';
+$lang['prev'] = 'ì´ì „';
+$lang['next'] = '다ìŒ';
+$lang['last'] = '마지막';
+$lang['edit_usermissing'] = 'ì„ íƒëœ 사용ìžë¥¼ ì°¾ì„ ìˆ˜ 없습니다, ì‚¬ìš©ìž ì´ë¦„ì´ ì‚­ì œë˜ê±°ë‚˜ 변경ëì„ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤.';
+$lang['user_notify'] = '사용ìžì—게 알림';
+$lang['note_notify'] = '사용ìžì—게 새로운 암호를 준 경우ì—만 알림 ì´ë©”ì¼ì´ 보내집니다.';
+$lang['note_group'] = '새로운 사용ìžë“¤ì€ ì–´ë–¤ ê·¸ë£¹ë„ ì„¤ì •í•˜ì§€ ì•Šì€ ê²½ìš°ì— ê¸°ë³¸ 그룹(%s)ì— ì¶”ê°€ë©ë‹ˆë‹¤.';
+$lang['note_pass'] = 'ì‚¬ìš©ìž í†µì§€ê°€ 지정ë˜ì–´ 있ì„ë•Œ, í•„ë“œì— ì•„ë¬´ê°’ë„ ìž…ë ¥í•˜ì§€ 않으면 암호가 ìžë™ ìƒì„± ë©ë‹ˆë‹¤.';
+$lang['add_ok'] = '사용ìžê°€ 성공ì ìœ¼ë¡œ 추가ë˜ì—ˆìŠµë‹ˆë‹¤.';
+$lang['add_fail'] = 'ì‚¬ìš©ìž ì¶”ê°€ê°€ 실패했습니다.';
+$lang['notify_ok'] = '알림 ì´ë©”ì¼ì´ 성공ì ìœ¼ë¡œ 발송ë˜ì—ˆìŠµë‹ˆë‹¤. ';
+$lang['notify_fail'] = '알림 ì´ë©”ì¼ ë°œì†¡ì´ ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/list.txt
new file mode 100644
index 000000000..93fa3d6f2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/list.txt
@@ -0,0 +1 @@
+===== ì‚¬ìš©ìž ëª©ë¡ =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/add.txt
new file mode 100644
index 000000000..32681ade7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/add.txt
@@ -0,0 +1,2 @@
+===== PridÄ—ti vartotojÄ… =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/delete.txt
new file mode 100644
index 000000000..262713c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/delete.txt
@@ -0,0 +1,2 @@
+===== IÅ¡trinti vartotojÄ… =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/edit.txt
new file mode 100644
index 000000000..da57ea380
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/edit.txt
@@ -0,0 +1,2 @@
+===== Redaguoti vartotojÄ… =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/intro.txt
new file mode 100644
index 000000000..61f80d52e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/intro.txt
@@ -0,0 +1,2 @@
+====== Vartotojų administravimas ======
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/lang.php
new file mode 100644
index 000000000..db3cf2d32
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/lang.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Lithuanian language file
+ *
+ * @author grawity <grawity@gmail.com>
+ * @author audrius.klevas@gmail.com
+ * @author Arunas Vaitekunas <aras@fan.lt>
+ */
+$lang['menu'] = 'Vartotojų administravimas';
+$lang['noauth'] = '(vartotojų autentifikacija neprieinama)';
+$lang['nosupport'] = '(vartotojų administravimas nepalaikomas)';
+$lang['badauth'] = 'neteisingas autentifikacijos būdas';
+$lang['user_id'] = 'Vartotojas';
+$lang['user_pass'] = 'Slaptažodis';
+$lang['user_name'] = 'Vardas';
+$lang['user_mail'] = 'El.paštas';
+$lang['user_groups'] = 'GrupÄ—s';
+$lang['field'] = 'Laukas';
+$lang['value'] = 'Turinys';
+$lang['add'] = 'PridÄ—ti';
+$lang['delete'] = 'Pašalinti';
+$lang['delete_selected'] = 'Pašalinti pažymėtus';
+$lang['edit'] = 'Redaguoti';
+$lang['edit_prompt'] = 'Redaguoti šį vartotoją';
+$lang['modify'] = 'IÅ¡saugoti';
+$lang['search'] = 'Paieška';
+$lang['search_prompt'] = 'Ieškoti';
+$lang['clear'] = 'Panaikinti filtrÄ…';
+$lang['filter'] = 'Filtras';
+$lang['summary'] = 'Rodomi vartotojai %1$d-%2$d iš %3$d rastų. Iš viso %4$d vartotojų.';
+$lang['nonefound'] = 'Vartotojų nerasta. Iš viso %d vartotojų.';
+$lang['delete_ok'] = 'Pašalinta %d vartotojų';
+$lang['delete_fail'] = '%d nepavyko pašalinti.';
+$lang['update_ok'] = 'Vartotojas sÄ—kmingai pakeistas';
+$lang['update_fail'] = 'Vartotojo pakeitimas nepavyko';
+$lang['update_exists'] = 'Vartotojo vardo pakeitimas nepavyko, nes nurodytas vartotojo vardas (%s) jau yra (kiti pakeitimai įvykdyti).';
+$lang['start'] = 'pradžia';
+$lang['prev'] = 'atgal';
+$lang['next'] = 'pirmyn';
+$lang['last'] = 'pabaiga';
+$lang['edit_usermissing'] = 'Pasirinktas vartotojas nerastas, nurodytas vartotojo vardas galėjo būti pašalintas ar pakeistas kitur.';
+$lang['user_notify'] = 'Įspėti vartotoją';
+$lang['note_notify'] = 'Ä®spÄ—jimas siunÄiamas tik tada, kai vartotojui priskiriamas naujas slaptažodis.';
+$lang['note_group'] = 'Jei grupė nenurodyta, nauji vartotojai pridedami į pagrindinę grupę (%s).';
+$lang['add_ok'] = 'Vartotojas sÄ—kmingai pridÄ—tas';
+$lang['add_fail'] = 'Vartotojo pridÄ—jimas nepavyko';
+$lang['notify_ok'] = 'Įspėjimo el.laiškas išsiųstas';
+$lang['notify_fail'] = 'Įspėjimo el.laiško išsiųsti nepavyko';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/list.txt
new file mode 100644
index 000000000..87be62843
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/list.txt
@@ -0,0 +1,2 @@
+===== Vartotojų sąrašas =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/add.txt
new file mode 100644
index 000000000..06fd70002
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/add.txt
@@ -0,0 +1 @@
+===== Pievienot lietotÄju =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/delete.txt
new file mode 100644
index 000000000..5f59af7b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/delete.txt
@@ -0,0 +1 @@
+===== DzÄ“st lietotÄju =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/edit.txt
new file mode 100644
index 000000000..efb0b04d7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/edit.txt
@@ -0,0 +1 @@
+===== Labot lietotÄju =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/intro.txt
new file mode 100644
index 000000000..b248ddcb7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/intro.txt
@@ -0,0 +1 @@
+====== LietotÄju pÄrvaldnieks ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/lang.php
new file mode 100644
index 000000000..620678ff5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/lang.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Latvian language file
+ *
+ * @author Aivars Miška <allefm@gmail.lv>
+ * @author Aivars Miška <allefm@gmail.com>
+ */
+$lang['menu'] = 'LietotÄju pÄrvaldnieks';
+$lang['noauth'] = '(lietotÄju autentifikÄcijas nav)';
+$lang['nosupport'] = '(lietotÄju pÄrvaldÄ«ba netiek uzturÄ“ta)';
+$lang['badauth'] = 'nederÄ«gs autentifikÄcijas mehÄnisms';
+$lang['user_id'] = 'LietotÄjs';
+$lang['user_pass'] = 'Parole';
+$lang['user_name'] = 'VÄrds/uzvÄrds';
+$lang['user_mail'] = 'Epasts';
+$lang['user_groups'] = 'Grupas';
+$lang['field'] = 'Lauks';
+$lang['value'] = 'Vērtība';
+$lang['add'] = 'Pielikt';
+$lang['delete'] = 'Dzēst';
+$lang['delete_selected'] = 'Dzēst izvēlēto';
+$lang['edit'] = 'Labot';
+$lang['edit_prompt'] = 'Labot Å¡o lietotÄju';
+$lang['modify'] = 'SaglabÄt izmaiņas';
+$lang['search'] = 'Meklēšana';
+$lang['search_prompt'] = 'Meklēt';
+$lang['clear'] = 'Noņemt meklēšanas filtru';
+$lang['filter'] = 'Filtrs';
+$lang['summary'] = 'LietotÄji %1$d.- %2$d. no %3$d atrastajiem. Pavisam %4$d lietotÄji.';
+$lang['nonefound'] = 'Neviens nav atrasts. Pavisam %d lietotÄju.';
+$lang['delete_ok'] = 'DzÄ“sti %d lietotÄji';
+$lang['delete_fail'] = '%d neizdevÄs izdzÄ“st.';
+$lang['update_ok'] = 'LietotÄja dati saglabÄti';
+$lang['update_fail'] = 'LietotÄja dati nav saglabÄti';
+$lang['update_exists'] = 'LietotÄja vÄrds nav nomainÄ«ts, norÄdÄ«to vÄrdu (%s) kÄds jau izmanto (pÄrÄ“jÄs izmaiņas tiks saglabÄtas).';
+$lang['start'] = 'sÄkums';
+$lang['prev'] = 'iepriekšējais';
+$lang['next'] = 'nÄkamais';
+$lang['last'] = 'pēdējais';
+$lang['edit_usermissing'] = 'NorÄdÄ«tais lietotÄjs nav atrasts, varbÅ«t tas ir dzÄ“st vai mainÄ«ts citur.';
+$lang['user_notify'] = 'Paziņot lietotÄjam';
+$lang['note_notify'] = 'Paziņojumus izsÅ«ta tikai tad, ja lietotÄjam dod jaunu paroli.';
+$lang['note_group'] = 'Ja nenorÄda grupu, lietotÄju pievieno noklusÄ“tajai grupai (%s).';
+$lang['note_pass'] = 'Ja paroles lauku atstÄj tukÅ¡u un atzÄ«mÄ“ paziņoÅ¡anu lietotÄjam, parole tiks Ä£enerÄ“ta automÄtiski.';
+$lang['add_ok'] = 'LietotÄjs veiksmÄ«gi pievienots';
+$lang['add_fail'] = 'LietotÄjs nav pievienots.';
+$lang['notify_ok'] = 'Paziņojums izsūtīts.';
+$lang['notify_fail'] = 'Nevar izsūtīt paziņojumu.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/list.txt
new file mode 100644
index 000000000..44a10d94c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/list.txt
@@ -0,0 +1 @@
+===== LietotÄju saraksts =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/add.txt
new file mode 100644
index 000000000..fc3a87737
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/add.txt
@@ -0,0 +1 @@
+====== सदसà¥à¤¯ नोंद करा ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/delete.txt
new file mode 100644
index 000000000..cf0e48551
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/delete.txt
@@ -0,0 +1 @@
+====== सदसà¥à¤¯ डिलीट करा ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/edit.txt
new file mode 100644
index 000000000..2d3d64915
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/edit.txt
@@ -0,0 +1 @@
+====== सदसà¥à¤¯ बदला ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/intro.txt
new file mode 100644
index 000000000..9253b323e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/intro.txt
@@ -0,0 +1 @@
+====== सदसà¥à¤¯ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤• ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/lang.php
new file mode 100644
index 000000000..8915678cc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/lang.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Marathi language file
+ *
+ * @author ghatothkach@hotmail.com
+ * @author Padmanabh Kulkarni <kulkarnipadmanabh@gmail.com>
+ * @author Padmanabh Kulkarni<kulkarnipadmanabh@gmail.com>
+ * @author shantanoo@gmail.com
+ */
+$lang['menu'] = 'सदसà¥à¤¯ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•';
+$lang['noauth'] = '( सदसà¥à¤¯ अधिकृत करणà¥à¤¯à¤¾à¤šà¥€ सà¥à¤µà¤¿à¤§à¤¾ नाही )';
+$lang['nosupport'] = '( सदसà¥à¤¯ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤¨ उपलबà¥à¤§ नाही )';
+$lang['badauth'] = 'अधिकृत करणà¥à¤¯à¤¾à¤šà¥€ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾ अवैध';
+$lang['user_id'] = 'सदसà¥à¤¯';
+$lang['user_pass'] = 'पासवरà¥à¤¡';
+$lang['user_name'] = 'खरे नाव';
+$lang['user_mail'] = 'ईमेल';
+$lang['user_groups'] = 'गट';
+$lang['field'] = 'रकाना';
+$lang['value'] = 'किमà¥à¤®à¤¤';
+$lang['add'] = 'जोड़ा';
+$lang['delete'] = 'डिलीट';
+$lang['delete_selected'] = 'निवडलेले डिलीट करा';
+$lang['edit'] = 'संपादन';
+$lang['edit_prompt'] = 'या सदसà¥à¤¯à¤¾à¤šà¥€ माहिती बदला';
+$lang['modify'] = 'बदल सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ करा';
+$lang['search'] = 'शोध';
+$lang['search_prompt'] = 'शोध करा';
+$lang['clear'] = 'शोधाचे निकष बदला';
+$lang['filter'] = 'निकष';
+$lang['summary'] = 'सापडलेलà¥à¤¯à¤¾ %3$d सदसà¥à¤¯à¤¾à¤ªà¥ˆà¤•à¥€ %1$d ते %2$d दाखवले आहेत. à¤à¤•à¥‚ण सदसà¥à¤¯à¤¾ %4$d.';
+$lang['nonefound'] = 'à¤à¤•à¤¹à¥€ सदसà¥à¤¯ मिळाला नाही. à¤à¤•à¥‚ण सदसà¥à¤¯ %d.';
+$lang['delete_ok'] = '%d सदसà¥à¤¯ डिलीट केले.';
+$lang['delete_fail'] = '%d डिलीट करू शकलो नाही.';
+$lang['update_ok'] = 'सदसà¥à¤¯à¤¾à¤šà¥€ माहिती यशसà¥à¤µà¥€à¤°à¥€à¤¤à¥à¤¯à¤¾ बदलली आहे';
+$lang['update_fail'] = 'सदसà¥à¤¯à¤¾à¤šà¥€ माहिती बदलता आली नाही';
+$lang['update_exists'] = 'सदसà¥à¤¯à¤¾à¤šà¥‡ नाव बदलू शकलो नाही. %s हे नाव आधीच असà¥à¤¤à¤¿à¤¤à¥à¤µà¤¾à¤¤ आहे. ( इतर सरà¥à¤µ बदल केले जातील )';
+$lang['start'] = 'सà¥à¤°à¥à¤µà¤¾à¤¤';
+$lang['prev'] = 'आधीचं';
+$lang['next'] = 'पà¥à¤¢à¤šà¤‚';
+$lang['last'] = 'शेवटचं';
+$lang['edit_usermissing'] = 'दिलेला सदसà¥à¤¯ सापडला नाही. तो कदाचित डिलीट à¤à¤¾à¤²à¤¾ असेल किंवा बदलला गेला असेल.';
+$lang['user_notify'] = 'सदसà¥à¤¯à¤¾à¤²à¤¾ सूचित करा.';
+$lang['note_notify'] = 'सदसà¥à¤¯à¤¾à¤²à¤¾ नवीन पासवरà¥à¤¡ दिला तरच सूचनेचे ईमेल पाठवले जातात.';
+$lang['note_group'] = 'नवीन सदसà¥à¤¯ जर गट निवडला नसेल तर %s या गटात टाकले जातील.';
+$lang['note_pass'] = 'पासवरà¥à¤¡à¤šà¤¾ रकाना रिकामा ठेवलà¥à¤¯à¤¾à¤¸ व सदसà¥à¤¯ सूचना वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾ चालू असलà¥à¤¯à¤¾à¤¸ पासवरà¥à¤¡ आपोआप तयार केला जाईल.';
+$lang['add_ok'] = 'सदसà¥à¤¯ यशसà¥à¤µà¥€à¤°à¥€à¤¤à¥à¤¯à¤¾ नोंद à¤à¤¾à¤²à¤¾';
+$lang['add_fail'] = 'सदसà¥à¤¯à¤¾à¤šà¥€ नोंद à¤à¤¾à¤²à¥€ नाही';
+$lang['notify_ok'] = 'सूचनेचा ईमेल पाठवला';
+$lang['notify_fail'] = 'सूचनेचा ईमेल पाठवला गेला नाही';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/list.txt
new file mode 100644
index 000000000..ab6906771
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/list.txt
@@ -0,0 +1 @@
+====== सदसà¥à¤¯ यादी ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/add.txt
new file mode 100644
index 000000000..868b12ab1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/add.txt
@@ -0,0 +1 @@
+=====पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ थपà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/delete.txt
new file mode 100644
index 000000000..4441c8349
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/delete.txt
@@ -0,0 +1 @@
+===== पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ मेटà¥à¤¨à¥à¤¹à¥‹à¤¸ ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/edit.txt
new file mode 100644
index 000000000..040d2697d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/edit.txt
@@ -0,0 +1 @@
+===== पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ समà¥à¤ªà¤¾à¤¦à¤¨ गरà¥à¤¨à¥à¤¹à¥‹à¤¸===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/intro.txt
new file mode 100644
index 000000000..de08e483d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/intro.txt
@@ -0,0 +1 @@
+====== पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤• ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/lang.php
new file mode 100644
index 000000000..f68ed2074
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/lang.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Nepali language file
+ *
+ * @author Saroj Kumar Dhakal <lotusnagarkot@gmail.com>
+ * @author SarojKumar Dhakal <lotusnagarkot@yahoo.com>
+ * @author Saroj Dhakal<lotusnagarkot@yahoo.com>
+ */
+$lang['menu'] = 'पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•';
+$lang['noauth'] = '(पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ पà¥à¤°à¤®à¤¾à¤£à¤¿à¤•à¤°à¤£ उपलबà¥à¤§ छैन)';
+$lang['nosupport'] = '(पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤¨ समरà¥à¤¥à¤¿à¤¤ छैन)';
+$lang['badauth'] = 'अमानà¥à¤¯ पà¥à¤°à¤®à¤¾à¤£à¤¿à¤•à¤°à¤£ विधि';
+$lang['user_id'] = 'पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾';
+$lang['user_pass'] = 'पà¥à¤°à¤µà¥‡à¤¶à¤¶à¤¬à¥à¤¦';
+$lang['user_name'] = 'वासà¥à¤¤à¤µà¤¿à¤• नाम';
+$lang['user_mail'] = 'इमेल';
+$lang['user_groups'] = 'समूह ';
+$lang['field'] = 'कà¥à¤·à¥‡à¤¤à¥à¤°';
+$lang['value'] = 'मान ';
+$lang['add'] = 'थपà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['delete'] = 'मेटà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['delete_selected'] = 'सेलेकà¥à¤Ÿ गरिà¤à¤•à¥‹ मेटà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['edit'] = 'समà¥à¤ªà¤¾à¤¦à¤¨ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['edit_prompt'] = 'यो पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ समà¥à¤ªà¤¾à¤¦à¤¨ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['modify'] = 'परिवरà¥à¤¤à¤¨ वचत गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['search'] = 'खोज';
+$lang['search_prompt'] = 'खोजà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['clear'] = 'खोज फिलà¥à¤Ÿà¤° पूरà¥à¤µà¤°à¥à¤ªà¤®à¤¾ फरà¥à¤•à¤¾à¤‰à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['filter'] = 'फिलà¥à¤Ÿà¤° ';
+$lang['summary'] = 'देखाउदै %1$d-%2$d of %3$d भेटिà¤à¤•à¤¾ %4$d कà¥à¤² पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ मधà¥à¤¯à¥‡à¤¬à¤¾à¤Ÿ ।';
+$lang['nonefound'] = '%d कà¥à¤² पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¥¤ कà¥à¤¨à¥ˆ पनि पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ भेटिà¤à¤¨ ।';
+$lang['delete_ok'] = '%d पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ मेटिà¤';
+$lang['delete_fail'] = '%d पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ हटाउन सकिà¤à¤¨ ';
+$lang['update_ok'] = 'पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ सफलतापूरà¥à¤µà¤• अधà¥à¤¯à¤¾à¤µà¤§à¤¿à¤• गरियो ';
+$lang['update_fail'] = 'पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ अधà¥à¤¯à¤¾à¤µà¤§à¤¿à¤• कारà¥à¤¯ असफल';
+$lang['update_exists'] = 'परà¥à¤¯à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤•à¥‹ नाम परिवरà¥à¤¤à¤¨ असफल, दिइà¤à¤•à¥‹ पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ नाम( %s) पहिले देखि रहेको छ। ( यसबाहेकका परिवरà¥à¤°à¤¨à¤¹à¤°à¥‚ गरिà¤à¤•à¤¾ छनà¥)';
+$lang['start'] = 'सà¥à¤°à¥ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['prev'] = 'पहिलेको ';
+$lang['next'] = 'पछिको';
+$lang['last'] = 'अनà¥à¤¤à¤¿à¤®';
+$lang['edit_usermissing'] = 'छानिà¤à¤•à¥‹ पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ भेटिà¤à¤¨, खà¥à¤²à¤¾à¤‡à¤à¤•à¥‹ पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ मेटिà¤à¤•à¥‹ या कतै परिवरà¥à¤¤à¤¨ गरिà¤à¤•à¥‹ हà¥à¤¨à¤¸à¤•à¥à¤›à¥¤';
+$lang['user_notify'] = 'पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤²à¤¾à¤ˆ जानकारी दिनà¥à¤¹à¥‹à¤¸à¥ ';
+$lang['note_notify'] = 'जानकारी इमेल तब मातà¥à¤° पठाइनà¥à¤› जब पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤²à¤¾à¤ˆ नयाठपà¥à¤°à¤µà¥‡à¤¶ शबà¥à¤¦ दिइनà¥à¤›à¥¤';
+$lang['note_group'] = 'नयाठपà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤²à¤¾à¤ˆ पूरà¥à¤µà¤¨à¤¿à¤°à¥à¤§à¤¾à¤°à¤¿à¤¤ समूह नखà¥à¤²à¤¾à¤à¤®à¤¾ (%s) मा समावेश गराइनेछ ।';
+$lang['note_pass'] = 'पà¥à¤°à¤µà¥‡à¤¶ शवà¥à¤¦ कà¥à¤·à¥‡à¤¤à¥à¤° खाली राखेमा पà¥à¤°à¤µà¥‡à¤¶ शवà¥à¤¦ सà¥à¤µà¤¤: निरà¥à¤®à¤¾à¤£ हà¥à¤¨à¥‡à¤› र पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤²à¤¾à¤ˆ जानकारी पठइने छ ।';
+$lang['add_ok'] = 'पà¥à¤°à¥‹à¤—करà¥à¤¤à¤¾ सफलतापूरà¥à¤µà¤• थपियो';
+$lang['add_fail'] = 'पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ थपà¥à¤¨à¥‡ कारà¥à¤¯ असफल';
+$lang['notify_ok'] = 'जानकारी पतà¥à¤° पठाइयो';
+$lang['notify_fail'] = 'जानकारी पतà¥à¤° पठाउन सकिà¤à¤¨ ';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/list.txt
new file mode 100644
index 000000000..ece94b388
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/list.txt
@@ -0,0 +1 @@
+===== पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ सà¥à¤šà¥€ ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/add.txt
new file mode 100644
index 000000000..992d9f300
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/add.txt
@@ -0,0 +1 @@
+===== Nieuwe gebruiker ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/delete.txt
new file mode 100644
index 000000000..ad26e058f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/delete.txt
@@ -0,0 +1 @@
+===== Verwijder gebruiker ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/edit.txt
new file mode 100644
index 000000000..0d58e48f3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/edit.txt
@@ -0,0 +1 @@
+===== Gebruiker wijzigen ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/intro.txt
new file mode 100644
index 000000000..7df09dbab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/intro.txt
@@ -0,0 +1 @@
+==== Gebruikersmanager ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/lang.php
new file mode 100644
index 000000000..d4f0eaad9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/lang.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * Dutch language file
+ *
+ * @author Wouter Schoot <wouter@schoot.org>
+ * @author John de Graaff <john@de-graaff.net>
+ * @author Niels Schoot <niels.schoot@quintiq.com>
+ * @author Dion Nicolaas <dion@nicolaas.net>
+ * @author Danny Rotsaert <danny.rotsaert@edpnet.be>
+ * @author Marijn Hofstra hofstra.m@gmail.com
+ * @author Matthias Carchon webmaster@c-mattic.be
+ */
+$lang['menu'] = 'Gebruikersmanager';
+$lang['noauth'] = '(gebruikersauthenticatie niet beschikbaar)';
+$lang['nosupport'] = '(gebruikersmanagement niet ondersteund)';
+$lang['badauth'] = 'ongeldige authenticatiemethode';
+$lang['user_id'] = 'Gebruiker';
+$lang['user_pass'] = 'Wachtwoord';
+$lang['user_name'] = 'Volledige naam';
+$lang['user_mail'] = 'E-mail';
+$lang['user_groups'] = 'Groepen';
+$lang['field'] = 'Veld';
+$lang['value'] = 'Waarde';
+$lang['add'] = 'Toevoegen';
+$lang['delete'] = 'Verwijder';
+$lang['delete_selected'] = 'Verwijder geselecteerden';
+$lang['edit'] = 'Wijzigen';
+$lang['edit_prompt'] = 'Wijzig deze gebruiker';
+$lang['modify'] = 'Wijzigingen opslaan';
+$lang['search'] = 'Zoek';
+$lang['search_prompt'] = 'Voer zoekopdracht uit';
+$lang['clear'] = 'Verwijder zoekfilter';
+$lang['filter'] = 'Filter';
+$lang['summary'] = 'Weergegeven gebruikers %1$d-%2$d van %3$d gevonden. %4$d gebruikers in totaal.';
+$lang['nonefound'] = 'Geen gebruikers gevonden. %d gebruikers in totaal.';
+$lang['delete_ok'] = '%d gebruikers verwijderd';
+$lang['delete_fail'] = '%d kon niet worden verwijderd.';
+$lang['update_ok'] = 'Gebruiker succesvol gewijzigd';
+$lang['update_fail'] = 'Gebruiker wijzigen mislukt';
+$lang['update_exists'] = 'Gebruikersnaam veranderen mislukt, de opgegeven gebruikersnaam (%s) bestaat reeds (overige aanpassingen worden wel doorgevoerd).';
+$lang['start'] = 'start';
+$lang['prev'] = 'vorige';
+$lang['next'] = 'volgende';
+$lang['last'] = 'laatste';
+$lang['edit_usermissing'] = 'Geselecteerde gebruiker niet gevonden, de opgegeven gebruikersnaam kan verwijderd zijn of elders aangepast.';
+$lang['user_notify'] = 'Gebruiker notificeren';
+$lang['note_notify'] = 'Notificatie-e-mails worden alleen verstuurd wanneer de gebruiker een nieuw wachtwoord wordt toegekend.';
+$lang['note_group'] = 'Nieuwe gebruikers zullen aan de standaard groep (%s) worden toegevoegd als er geen groep opgegeven is.';
+$lang['note_pass'] = 'Het wachtwoord wordt automatisch gegenereerd als het veld wordt leeggelaten en gebruikersnotificaties aanstaan.';
+$lang['add_ok'] = 'Gebruiker succesvol toegevoegd';
+$lang['add_fail'] = 'Gebruiker kon niet worden toegevoegd';
+$lang['notify_ok'] = 'Notificatie-e-mail verzonden';
+$lang['notify_fail'] = 'Notificatie-e-mail kon niet worden verzonden';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/list.txt
new file mode 100644
index 000000000..a9aac845d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/list.txt
@@ -0,0 +1 @@
+===== Gebruikerslijst ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/add.txt
new file mode 100644
index 000000000..4fb9cf271
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/add.txt
@@ -0,0 +1 @@
+===== Legg til bruker ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/delete.txt
new file mode 100644
index 000000000..55010182f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/delete.txt
@@ -0,0 +1 @@
+===== Slett bruker ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/edit.txt
new file mode 100644
index 000000000..3dff0c92e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/edit.txt
@@ -0,0 +1 @@
+===== Rediger bruker ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/intro.txt
new file mode 100644
index 000000000..c9e1e5b8c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/intro.txt
@@ -0,0 +1 @@
+===== Behandle brukere ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/lang.php
new file mode 100644
index 000000000..df38de1b0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/lang.php
@@ -0,0 +1,56 @@
+<?php
+/**
+ * Norwegianlanguage file
+ *
+ * @author Thomas Nygreen <nygreen@gmail.com>
+ * @author Arild Burud <arildb@met.no>
+ * @author Torkill Bruland <torkar-b@online.no>
+ * @author Rune M. Andersen <rune.andersen@gmail.com>
+ * @author Jakob Vad Nielsen (me@jakobnielsen.net)
+ * @author Kjell Tore Næsgaard <kjell.t.nasgaard@ntnu.no>
+ * @author Knut Staring <knutst@gmail.com>
+ * @author Lisa Ditlefsen <lisa@vervesearch.com>
+ * @author Erik Pedersen <erik.pedersen@shaw.ca>
+ * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
+ */
+$lang['menu'] = 'Behandle brukere';
+$lang['noauth'] = '(autentisering av brukere ikke tilgjengelig)';
+$lang['nosupport'] = '(behandling av brukere støttes ikke)';
+$lang['badauth'] = 'ugyldig autentiseringsmekanisme';
+$lang['user_id'] = 'Bruker';
+$lang['user_pass'] = 'Passord';
+$lang['user_name'] = 'Fullt navn';
+$lang['user_mail'] = 'E-post';
+$lang['user_groups'] = 'Grupper';
+$lang['field'] = 'Felt';
+$lang['value'] = 'Verdi';
+$lang['add'] = 'Legg til';
+$lang['delete'] = 'Slett';
+$lang['delete_selected'] = 'Slett utvalgte';
+$lang['edit'] = 'Rediger';
+$lang['edit_prompt'] = 'Rediger denne brukeren';
+$lang['modify'] = 'Lagre endringer';
+$lang['search'] = 'Søk';
+$lang['search_prompt'] = 'Start søk';
+$lang['clear'] = 'Tilbakestill søkefilter';
+$lang['filter'] = 'Filter';
+$lang['summary'] = 'Viser brukere %1$d-%2$d av %3$d. %4$d users total.';
+$lang['nonefound'] = 'Ingen brukere funnet. %d brukere totalt.';
+$lang['delete_ok'] = '%d brukere slettet.';
+$lang['delete_fail'] = '%d kunne ikke slettes.';
+$lang['update_ok'] = 'Brukeren ble oppdatert';
+$lang['update_fail'] = 'Oppdatering av brukeren feilet';
+$lang['update_exists'] = 'Endring av brukernavn feilet. Det oppgitte brukernavnet (%s) eksisterer allerede (alle andre endringer vil bli gjort).';
+$lang['start'] = 'første';
+$lang['prev'] = 'forrige';
+$lang['next'] = 'neste';
+$lang['last'] = 'siste';
+$lang['edit_usermissing'] = 'Fant ikke valgte brukere. Det oppgitte brukernavnet kan ha blitt slettet eller endret et annet sted.';
+$lang['user_notify'] = 'Varsle bruker';
+$lang['note_notify'] = 'E-post med varsling blir bare sendt hvis brukeren blir gitt nytt passord.';
+$lang['note_group'] = 'Nye brukere vil bli lagt til standardgruppen (%s) hvis ingen gruppe oppgis.';
+$lang['note_pass'] = 'Passordet vil bli autogenerert dersom feltet er tomt og varsle bruker er valgt.';
+$lang['add_ok'] = 'Brukeren ble lagt til';
+$lang['add_fail'] = 'Brukeren kunne ikke legges til';
+$lang['notify_ok'] = 'Varsling sendt';
+$lang['notify_fail'] = 'Varsling kunne ikke sendes';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/list.txt
new file mode 100644
index 000000000..40de64b01
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/list.txt
@@ -0,0 +1 @@
+===== Brukerliste ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/add.txt
new file mode 100644
index 000000000..a33f3baa7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/add.txt
@@ -0,0 +1 @@
+===== Dodawanie użytkownika =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/delete.txt
new file mode 100644
index 000000000..72dd338f3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/delete.txt
@@ -0,0 +1 @@
+===== Usuwanie użytkownika =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/edit.txt
new file mode 100644
index 000000000..3c9d89835
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/edit.txt
@@ -0,0 +1 @@
+===== Edycja użytkownika =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/intro.txt
new file mode 100644
index 000000000..da1cfeac0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/intro.txt
@@ -0,0 +1 @@
+====== Menadżer użytkowników ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/lang.php
new file mode 100644
index 000000000..3db83b9b3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/lang.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * polish language file
+ *
+ * @author Grzegorz Żur <grzegorz.zur@gmail.com>
+ * @author Mariusz Kujawski <marinespl@gmail.com>
+ * @author Maciej Kurczewski <pipijajko@gmail.com>
+ * @author SÅ‚awomir Boczek <slawkens@gmail.com>
+ */
+$lang['menu'] = 'Menadżer użytkowników';
+$lang['noauth'] = '(uwierzytelnienie użytkownika niemożliwe)';
+$lang['nosupport'] = '(zarządzanie użytkownikami niemożliwe)';
+$lang['badauth'] = 'błędny mechanizm uwierzytelniania';
+$lang['user_id'] = 'Nazwa użytkownika';
+$lang['user_pass'] = 'Hasło';
+$lang['user_name'] = 'Użytkownik';
+$lang['user_mail'] = 'E-mail';
+$lang['user_groups'] = 'Grupy';
+$lang['field'] = 'Pole';
+$lang['value'] = 'Wartość';
+$lang['add'] = 'Dodaj';
+$lang['delete'] = 'Usuń';
+$lang['delete_selected'] = 'Usuń zaznaczone';
+$lang['edit'] = 'Edytuj';
+$lang['edit_prompt'] = 'Edytuj użytkownika';
+$lang['modify'] = 'Zapisz zmiany';
+$lang['search'] = 'Szukaj';
+$lang['search_prompt'] = 'Rozpocznij przeszukiwanie';
+$lang['clear'] = 'Resetuj filtr przeszukiwania';
+$lang['filter'] = 'Filtr';
+$lang['summary'] = 'Użytkownicy %1$d-%2$d z %3$d znalezionych. Całkowita ilość użytkowników %4$d.';
+$lang['nonefound'] = 'Nie znaleziono użytkowników. Całkowita ilość użytkowników %d.';
+$lang['delete_ok'] = 'Usunięto %d użytkowników.';
+$lang['delete_fail'] = 'Błąd przy usuwaniu %d użytkowników.';
+$lang['update_ok'] = 'Dane użytkownika zostały zmienione!';
+$lang['update_fail'] = 'Błąd przy zmianie danych użytkownika!';
+$lang['update_exists'] = 'Błąd przy zmianie nazwy użytkownika, użytkownik o tej nazwie (%s) już istnieje (inne zmiany zostały wprowadzone).';
+$lang['start'] = 'poczÄ…tek';
+$lang['prev'] = 'poprzedni';
+$lang['next'] = 'następny';
+$lang['last'] = 'ostatni';
+$lang['edit_usermissing'] = 'Nie znaleziono wybranego użytkownika, nazwa użytkownika mogła zostać zmieniona lub usunięta.';
+$lang['user_notify'] = 'Powiadamianie użytkownika';
+$lang['note_notify'] = 'Powiadomienia wysyłane są tylko jeżeli zmieniono hasło użytkownika.';
+$lang['note_group'] = 'Nowy użytkownik zostanie dodany do grupy domyślnej (%s) jeśli nie podano innej grupy.';
+$lang['note_pass'] = 'Jeśli pole będzie puste i powiadamianie użytkownika jest włączone, hasło zostanie automatyczne wygenerowane.';
+$lang['add_ok'] = 'Dodano użytkownika';
+$lang['add_fail'] = 'Dodawanie użytkownika nie powiodło się';
+$lang['notify_ok'] = 'Powiadomienie zostało wysłane';
+$lang['notify_fail'] = 'Wysyłanie powiadomienia nie powiodło się';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/list.txt
new file mode 100644
index 000000000..57da2e605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/list.txt
@@ -0,0 +1 @@
+===== Lista użytkowników =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/add.txt
new file mode 100644
index 000000000..759ed688b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/add.txt
@@ -0,0 +1 @@
+===== Adicionar usuário ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/delete.txt
new file mode 100644
index 000000000..9d18d58ff
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/delete.txt
@@ -0,0 +1 @@
+===== Excluir usuário ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/edit.txt
new file mode 100644
index 000000000..a1be1c8b7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/edit.txt
@@ -0,0 +1 @@
+===== Editar usuário ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/intro.txt
new file mode 100644
index 000000000..5f3399653
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/intro.txt
@@ -0,0 +1 @@
+====== Gerenciamento de Usuários ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/lang.php
new file mode 100644
index 000000000..cf7e48ea7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/lang.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Portuguese language file
+ *
+ * @author Frederico Gonçalves Guimarães <frederico@teia.bio.br>
+ * @author Felipe Castro <fefcas@gmail.com>
+ * @author Lucien Raven <lucienraven@yahoo.com.br>
+ * @author Enrico Nicoletto <liverig@gmail.com>
+ * @author Flávio Veras <flaviove@gmail.com>
+ * @author Jeferson Propheta <jeferson.propheta@gmail.com>
+ * @author jair.henrique@gmail.com
+ * @author Luis Dantas <luis@dantas.com>
+ * @author Frederico Guimarães <frederico@teia.bio.br>
+ * @author Jair Henrique <jair.henrique@gmail.com>
+ * @author Luis Dantas <luisdantas@gmail.com>
+ */
+$lang['menu'] = 'Gerenciamento de Usuários';
+$lang['noauth'] = '(o gerenciamento de usuários não está disponível)';
+$lang['nosupport'] = '(o gerenciamento de usuários não é suportado)';
+$lang['badauth'] = 'mecanismo de autenticação inválido';
+$lang['user_id'] = 'Usuário';
+$lang['user_pass'] = 'Senha';
+$lang['user_name'] = 'Nome real';
+$lang['user_mail'] = 'E-mail';
+$lang['user_groups'] = 'Grupos';
+$lang['field'] = 'Campo';
+$lang['value'] = 'Valor';
+$lang['add'] = 'Adicionar';
+$lang['delete'] = 'Excluir';
+$lang['delete_selected'] = 'Excluir a seleção';
+$lang['edit'] = 'Editar';
+$lang['edit_prompt'] = 'Editar esse usuário';
+$lang['modify'] = 'Salvar as alterações';
+$lang['search'] = 'Pesquisar';
+$lang['search_prompt'] = 'Executar a pesquisa';
+$lang['clear'] = 'Limpar o filtro de pesquisa';
+$lang['filter'] = 'Filtro';
+$lang['summary'] = 'Exibindo usuários %1$d-%2$d de %3$d encontrados. %4$d usuários no total.';
+$lang['nonefound'] = 'Nenhum usuário encontrado. %d usuários no total.';
+$lang['delete_ok'] = '%d usuários excluídos';
+$lang['delete_fail'] = 'Erro na exclusão de %d usuários.';
+$lang['update_ok'] = 'Usuário atualizado com sucesso';
+$lang['update_fail'] = 'Não foi possível atualizar o usuário';
+$lang['update_exists'] = 'Não foi possível mudar o nome do usuário. O nome especificado (%s) já existe (as outras mudanças serão aplicadas).';
+$lang['start'] = 'primeira';
+$lang['prev'] = 'anterior';
+$lang['next'] = 'próxima';
+$lang['last'] = 'última';
+$lang['edit_usermissing'] = 'O usuário selecionado não foi encontrado, ele foi excluído ou teve o seu nome modificado.';
+$lang['user_notify'] = 'Notificar o usuário';
+$lang['note_notify'] = 'E-mails de notificação são enviados apenas se o usuário digitar uma nova senha.';
+$lang['note_group'] = 'Novos usuários serão adicionados ao grupo padrão (%s), caso nenhum grupo seja especificado.';
+$lang['note_pass'] = 'A senha será gerada automaticamente se o campo for deixado em branco e a notificação de usuário estiver habilitada.';
+$lang['add_ok'] = 'O usuário foi adicionado com sucesso';
+$lang['add_fail'] = 'O usuário não foi adicionado';
+$lang['notify_ok'] = 'O e-mail de notificação foi enviado';
+$lang['notify_fail'] = 'Não foi possível enviar o e-mail de notificação';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/list.txt
new file mode 100644
index 000000000..e5f79fb8d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/list.txt
@@ -0,0 +1 @@
+===== Lista de usuários ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/add.txt
new file mode 100644
index 000000000..a4c2672c7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/add.txt
@@ -0,0 +1 @@
+===== Adicionar Utilizador ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/delete.txt
new file mode 100644
index 000000000..95bffc1e3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/delete.txt
@@ -0,0 +1 @@
+===== Remover Utilizador ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/edit.txt
new file mode 100644
index 000000000..176798454
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/edit.txt
@@ -0,0 +1 @@
+===== Editar Utilizador ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/intro.txt
new file mode 100644
index 000000000..27985ded6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/intro.txt
@@ -0,0 +1 @@
+===== Gerir Utilizadores ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/lang.php
new file mode 100644
index 000000000..8c4607922
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/lang.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Portugueselanguage file
+ *
+ * @author José Monteiro <Jose.Monteiro@DoWeDo-IT.com>
+ * @author Enrico Nicoletto <liverig@gmail.com>
+ * @author Fil <fil@meteopt.com>
+ * @author André Neves <drakferion@gmail.com>
+ */
+$lang['menu'] = 'Gestor de Perfis';
+$lang['noauth'] = '(autenticação indisponível)';
+$lang['nosupport'] = '(gestão de utilizadores não suportada)';
+$lang['badauth'] = 'Mecanismo de autenticação inválido';
+$lang['user_id'] = 'Utilizador';
+$lang['user_pass'] = 'Senha';
+$lang['user_name'] = 'Nome Real';
+$lang['user_mail'] = 'E-mail';
+$lang['user_groups'] = 'Grupos';
+$lang['field'] = 'Campo';
+$lang['value'] = 'Valor';
+$lang['add'] = 'Adicionar';
+$lang['delete'] = 'Remover';
+$lang['delete_selected'] = 'Remover Seleccionado(s)';
+$lang['edit'] = 'Editar';
+$lang['edit_prompt'] = 'Editar utilizador';
+$lang['modify'] = 'Gravar Alterações';
+$lang['search'] = 'Pesquisar';
+$lang['search_prompt'] = 'Pesquisar';
+$lang['clear'] = 'Limpar Filtro de Pesquisa';
+$lang['filter'] = 'Filtro';
+$lang['summary'] = 'Apresentar utilizadores %1$d-%2$d de %3$d encontrados. %4$d inscritos.';
+$lang['nonefound'] = 'Nenhum utilizador encontrado. %d inscritos.';
+$lang['delete_ok'] = '%d utilizadores removidos';
+$lang['delete_fail'] = '%d remoções falhadas.';
+$lang['update_ok'] = 'Utilizador actualizado';
+$lang['update_fail'] = 'Utilizador não actualizado';
+$lang['update_exists'] = 'Falhou a alteração do nome, porque o utilizador (%s) já existe (as restantes alterações serão aplicadas).';
+$lang['start'] = 'primeiro';
+$lang['prev'] = 'anterior';
+$lang['next'] = 'seguinte';
+$lang['last'] = 'último';
+$lang['edit_usermissing'] = 'Utilizador seleccionado não encontrado. Terá já sido removido ou alterado entretanto?';
+$lang['user_notify'] = 'Notificar utilizador';
+$lang['note_notify'] = 'Notificações só são enviadas se for atribuída uma nova senha ao utilizador.';
+$lang['note_group'] = 'Os novos utilizadores são adicionados ao grupo por omissão (%s) se não for especificado nenhum grupo.';
+$lang['note_pass'] = 'A password será automáticamente gerada se o campo esquerdo estiver vazio e a notificação de utilizador estiver activada.';
+$lang['add_ok'] = 'Utilizador adicionado.';
+$lang['add_fail'] = 'Utilizador não adicionado.';
+$lang['notify_ok'] = 'Mensagem de notificação enviada.';
+$lang['notify_fail'] = 'Não foi possível enviar mensagem de notificação';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/list.txt
new file mode 100644
index 000000000..01a0460aa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/list.txt
@@ -0,0 +1 @@
+===== Lista de Utilizadores ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/add.txt
new file mode 100644
index 000000000..9a5c45eef
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/add.txt
@@ -0,0 +1 @@
+===== Adaugă utilizator ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/delete.txt
new file mode 100644
index 000000000..ea65fa984
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/delete.txt
@@ -0,0 +1 @@
+===== Åžterge utilizator ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/edit.txt
new file mode 100644
index 000000000..b7f8a4213
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/edit.txt
@@ -0,0 +1 @@
+===== Editează utilizator ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/intro.txt
new file mode 100644
index 000000000..f3c66266d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/intro.txt
@@ -0,0 +1 @@
+===== Manager Utilizatori ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/lang.php
new file mode 100644
index 000000000..260814aed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/lang.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * Romanian language file
+ *
+ * @author Sergiu Baltariu <s_baltariu@yahoo.com>
+ * @author s_baltariu@yahoo.com
+ * @author Emanuel-Emeric Andrasi <n30@mandrivausers.ro>
+ * @author Emanuel-Emeric Andrași <n30@mandrivausers.ro>
+ * @author Emanuel-Emeric AndraÅŸi <em.andrasi@mandrivausers.ro>
+ * @author Emanuel-Emeric Andrasi <em.andrasi@mandrivausers.ro>
+ */
+$lang['menu'] = 'Manager Utilizatori';
+$lang['noauth'] = '(autentificarea utilizatorilor nu este disponibilă)';
+$lang['nosupport'] = '(menegementul utilizatorilor nu e suportat)';
+$lang['badauth'] = 'mecanism de autentificare invalid';
+$lang['user_id'] = 'Utilizator';
+$lang['user_pass'] = 'Parolă';
+$lang['user_name'] = 'Nume Real';
+$lang['user_mail'] = 'Email';
+$lang['user_groups'] = 'Grupuri';
+$lang['field'] = 'Câmp';
+$lang['value'] = 'Valoare';
+$lang['add'] = 'Adaugă';
+$lang['delete'] = 'Åžterge';
+$lang['delete_selected'] = 'Şterge selecţia';
+$lang['edit'] = 'Editează';
+$lang['edit_prompt'] = 'Editează acest utilizator';
+$lang['modify'] = 'Salvează Modificările';
+$lang['search'] = 'Caută';
+$lang['search_prompt'] = 'Se caută';
+$lang['clear'] = 'Resetează Filtrul de Căutare';
+$lang['filter'] = 'Filtru';
+$lang['summary'] = 'Afişarea utilizatorilor %1$d-%2$d din %3$d găsită. %4$d utilizatori în total.';
+$lang['nonefound'] = 'Nici un utilizator nu a fost găsit. %d utilizatori în total.';
+$lang['delete_ok'] = '%d utilizatori ÅŸterÅŸi';
+$lang['delete_fail'] = '%d eÅŸuat la ÅŸtergere.';
+$lang['update_ok'] = 'Utilizatorul a fost actualizat cu succes';
+$lang['update_fail'] = 'Actualizarea utilizatorului a eÅŸuat';
+$lang['update_exists'] = 'Modificarea numelui de utilizator a eşuat. Numele de utilizator specificat (%s) există deja (orice altă modificare se va aplica)';
+$lang['start'] = 'început';
+$lang['prev'] = 'anterior';
+$lang['next'] = 'urmator';
+$lang['last'] = 'sfârşit';
+$lang['edit_usermissing'] = 'Utilizatorul selectat nu a fost găsit. E posibil ca numele de utilizator specificat să fi fost şters sau modificat în altă parte.';
+$lang['user_notify'] = 'Notificare utilizator';
+$lang['note_notify'] = 'Emailurile de notificare sunt trimise numai dacă utilizatorului îi este dată o nouă parolă.';
+$lang['note_group'] = 'Noii utilizatori vor fi adăugaţi la grupul implicit (%s) dacă nu se specifică grupul.';
+$lang['note_pass'] = 'Parola va fi regenerată automat dacă câmpul este lăsat gol şi notificarea utilizatorului este activată.';
+$lang['add_ok'] = 'Utilizator adăugat cu succes';
+$lang['add_fail'] = 'Adăugarea utilizatorului a eşuat';
+$lang['notify_ok'] = 'Emailul de notificare a fost trimis';
+$lang['notify_fail'] = 'Emailul de notificare nu a putut fi trimis';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/list.txt
new file mode 100644
index 000000000..6c0563444
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/list.txt
@@ -0,0 +1 @@
+===== Listă utilizatori ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/add.txt
new file mode 100644
index 000000000..3cb4264e7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/add.txt
@@ -0,0 +1 @@
+===== Добавить Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/delete.txt
new file mode 100644
index 000000000..80f874e05
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/delete.txt
@@ -0,0 +1 @@
+===== Удалить Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/edit.txt
new file mode 100644
index 000000000..d447c4005
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/edit.txt
@@ -0,0 +1 @@
+===== Редактировать Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/intro.txt
new file mode 100644
index 000000000..3a3e2607d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/intro.txt
@@ -0,0 +1 @@
+====== Управление пользователÑми ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/lang.php
new file mode 100644
index 000000000..7bfe3410d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/lang.php
@@ -0,0 +1,56 @@
+<?php
+/**
+ * Russian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Denis Simakov <akinoame1@gmail.com>
+ * @author Andrew Pleshakov <beotiger@mail.ru>
+ * @author Змей ЭтерийÑкий evil_snake@eternion.ru
+ * @author Hikaru Nakajima <jisatsu@mail.ru>
+ * @author Alexei Tereschenko <alexeitlex@yahoo.com>
+ * @author Irina Ponomareva irinaponomareva@webperfectionist.com
+ * @author Alexander Sorkin <kibizoid@gmail.com>
+ * @author Kirill Krasnov <krasnovforum@gmail.com>
+ * @author Vlad Tsybenko <vlad.development@gmail.com>
+ */
+$lang['menu'] = 'Управление пользователÑми';
+$lang['noauth'] = '(Ð°Ð²Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¹ недоÑтупна)';
+$lang['nosupport'] = '(управление пользователÑми не поддерживаетÑÑ)';
+$lang['badauth'] = 'некорректный механизм аутентификации';
+$lang['user_id'] = 'Логин';
+$lang['user_pass'] = 'Пароль';
+$lang['user_name'] = 'Полное имÑ';
+$lang['user_mail'] = 'Е-мÑйл';
+$lang['user_groups'] = 'Группы';
+$lang['field'] = 'Поле';
+$lang['value'] = 'Значение';
+$lang['add'] = 'Добавить';
+$lang['delete'] = 'Удалить';
+$lang['delete_selected'] = 'Удалить выбранные';
+$lang['edit'] = 'Редактировать';
+$lang['edit_prompt'] = 'Редактировать Ñтого пользователÑ';
+$lang['modify'] = 'Сохранить изменениÑ';
+$lang['search'] = 'ПоиÑк';
+$lang['search_prompt'] = 'ИÑкать';
+$lang['clear'] = 'Ð¡Ð±Ñ€Ð¾Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð° поиÑка';
+$lang['filter'] = 'Фильтр';
+$lang['summary'] = 'Показаны пользователи %1$d-%2$d из %3$d найденных. Ð’Ñего пользователей: %4$d.';
+$lang['nonefound'] = 'Ðе найдено ни одного пользователÑ. Ð’Ñего пользователей: %d.';
+$lang['delete_ok'] = 'Удалено пользователей: %d';
+$lang['delete_fail'] = 'Ðе удалоÑÑŒ удалить %d.';
+$lang['update_ok'] = 'Пользователь уÑпешно обновлен';
+$lang['update_fail'] = 'Ðе удалоÑÑŒ обновить пользователÑ';
+$lang['update_exists'] = 'Ðе удалоÑÑŒ изменить Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ, такой пользователь (%s) уже ÑущеÑтвует (вÑе оÑтальные Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÑƒÑ‚ применены).';
+$lang['start'] = 'в начало';
+$lang['prev'] = 'назад';
+$lang['next'] = 'вперед';
+$lang['last'] = 'в конец';
+$lang['edit_usermissing'] = 'Выбранный пользователь не найден. Возможно, указанный логин был удален или изменен извне.';
+$lang['user_notify'] = 'Сообщить пользователю';
+$lang['note_notify'] = 'Е-мÑйлы Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸ÐµÐ¼ поÑылаютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ в Ñлучае Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ паролÑ.';
+$lang['note_group'] = 'ЕÑли группа не указана, новые пользователи будут добавлены в группу по умолчанию (%s).';
+$lang['note_pass'] = 'Пароль будет Ñгенерирован автоматичеÑки, еÑли поле оÑтавлено пуÑтым и включено уведомление пользователÑ.';
+$lang['add_ok'] = 'Пользователь уÑпешно добавлен';
+$lang['add_fail'] = 'Ðе удалоÑÑŒ добавить пользователÑ';
+$lang['notify_ok'] = 'Е-мÑйл Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸ÐµÐ¼ был поÑлан';
+$lang['notify_fail'] = 'Ðе удалоÑÑŒ поÑлать е-мÑйл Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸ÐµÐ¼';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/list.txt
new file mode 100644
index 000000000..26c0cbead
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/list.txt
@@ -0,0 +1 @@
+===== СпиÑок пользователей =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/add.txt
new file mode 100644
index 000000000..e2e106089
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/add.txt
@@ -0,0 +1,2 @@
+===== Pridanie užívateľa =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/delete.txt
new file mode 100644
index 000000000..c7d6a3cc2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/delete.txt
@@ -0,0 +1,2 @@
+===== Zmazanie užívateľa =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/edit.txt
new file mode 100644
index 000000000..28af5b53c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/edit.txt
@@ -0,0 +1,2 @@
+===== Zmena užívateľa =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/intro.txt
new file mode 100644
index 000000000..0a626de52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/intro.txt
@@ -0,0 +1,2 @@
+====== Správa používateľov ======
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/lang.php
new file mode 100644
index 000000000..8b309bc71
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/lang.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Slovak language file
+ *
+ * @author Ondrej Végh <ov@vsieti.sk>
+ * @author Michal Mesko <michal.mesko@gmail.com>
+ * @author exusik@gmail.com
+ * @author Martin Michalek <michalek.dev@gmail.com>
+ */
+$lang['menu'] = 'Správa používateľov';
+$lang['noauth'] = '(autentifikácia užívateľov nie je dostupná)';
+$lang['nosupport'] = '(správa užívateľov nie je podporovaná)';
+$lang['badauth'] = 'vadný autorizaÄný mechanizmus';
+$lang['user_id'] = 'Užívateľ';
+$lang['user_pass'] = 'Heslo';
+$lang['user_name'] = 'SkutoÄné meno';
+$lang['user_mail'] = 'Email';
+$lang['user_groups'] = 'Skupiny';
+$lang['field'] = 'Pole';
+$lang['value'] = 'Hodnota';
+$lang['add'] = 'Pridať';
+$lang['delete'] = 'Zmazať';
+$lang['delete_selected'] = 'Zmazať vybrané';
+$lang['edit'] = 'Zmeniť';
+$lang['edit_prompt'] = 'Zmeniť tohoto užívateľa';
+$lang['modify'] = 'Uložiť zmeny';
+$lang['search'] = 'Hľadať';
+$lang['search_prompt'] = 'Vykonať vyhľadávanie';
+$lang['clear'] = 'Vynulovať vyhľadávací filter';
+$lang['filter'] = 'Filter';
+$lang['summary'] = 'Zobrazenie užívateľov %1$d-%2$d z %3$d nájdených. %4$d užívateľov celkom.';
+$lang['nonefound'] = 'Žiadni užívatelia nenájdení. %d užívateľov celkom.';
+$lang['delete_ok'] = '%d užívateľov zmazaných';
+$lang['delete_fail'] = '%d chýb vymazania.';
+$lang['update_ok'] = 'Užívateľ úspešne zmenený';
+$lang['update_fail'] = 'Chyba zmeny užívateľa';
+$lang['update_exists'] = 'Chyba zmeny užívateľa, užívateľské meno (%s) už existuje (iné zmeny budú zaznamenané).';
+$lang['start'] = 'prvé';
+$lang['prev'] = 'predošlé';
+$lang['next'] = 'ÄalÅ¡ie';
+$lang['last'] = 'posledné';
+$lang['edit_usermissing'] = 'Vybraný užívateľ nebol nájdený, mohol byť zmazaný, alebo zmenený iným spôsobom.';
+$lang['user_notify'] = 'Upozorniť užívateľa';
+$lang['note_notify'] = 'NotifikaÄné e-maily iba vtedy, ak dostane užívateľ nové heslo';
+$lang['note_group'] = 'Noví užívatelia budú pridaní do východej skupiny (%s), ak nie je pre nich špecifikovaná iná skupina.';
+$lang['note_pass'] = 'Heslo bude vygenegované automaticky, ak bude pole prázdne a je zapnutá notifikácia používateľa.';
+$lang['add_ok'] = 'Používateľ úspešne pridaný';
+$lang['add_fail'] = 'Pridávanie užívateľa nebolo úspešné';
+$lang['notify_ok'] = 'NotifikaÄný e-mail bol poslaný';
+$lang['notify_fail'] = 'NotifikaÄný e-mail nemohol byÅ¥ poslaný';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/list.txt
new file mode 100644
index 000000000..6f15331e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/list.txt
@@ -0,0 +1,2 @@
+===== Zoznam užívateľov =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/add.txt
new file mode 100644
index 000000000..985fa607e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/add.txt
@@ -0,0 +1 @@
+===== Dodaj uporabnika ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/delete.txt
new file mode 100644
index 000000000..515b343e5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/delete.txt
@@ -0,0 +1 @@
+===== Izbriši uporabnika ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/edit.txt
new file mode 100644
index 000000000..23aeb0c3b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/edit.txt
@@ -0,0 +1 @@
+===== Uredi uporabnika ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/lang.php
new file mode 100644
index 000000000..e31f8ff1a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/lang.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Slovenian language file
+ *
+ * @author Dejan Levec <webphp@gmail.com>
+ * @author BoÅ¡tjan SeniÄar <senicar@gmail.com>
+ */
+$lang['user_id'] = 'Uporabnik';
+$lang['user_pass'] = 'Geslo';
+$lang['user_mail'] = 'Email';
+$lang['user_groups'] = 'Skupine';
+$lang['add'] = 'Dodaj';
+$lang['delete'] = 'Izbriši';
+$lang['delete_selected'] = 'Izbriši izbrano';
+$lang['edit'] = 'Uredi';
+$lang['modify'] = 'Shrani spremembe';
+$lang['search'] = 'Iskanje';
+$lang['prev'] = 'Prejšnji';
+$lang['next'] = 'Naslednji';
+$lang['last'] = 'Zadnji';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/list.txt
new file mode 100644
index 000000000..1aa8b7a7c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/list.txt
@@ -0,0 +1 @@
+===== Seznam uporabnikov ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/add.txt
new file mode 100644
index 000000000..1de9a50e4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/add.txt
@@ -0,0 +1 @@
+===== Додај кориÑника ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/delete.txt
new file mode 100644
index 000000000..9b50365be
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/delete.txt
@@ -0,0 +1 @@
+===== Обриши кориÑника ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/edit.txt
new file mode 100644
index 000000000..11e22e2f5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/edit.txt
@@ -0,0 +1 @@
+===== Измени кориÑника ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/intro.txt
new file mode 100644
index 000000000..6c6ac9a5c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/intro.txt
@@ -0,0 +1 @@
+====== Управљач кориÑницима ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/lang.php
new file mode 100644
index 000000000..ab64c925a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/lang.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Serbian language file
+ *
+ * @author Иван Петровић petrovicivan@ubuntusrbija.org
+ * @author Ivan Petrovic <petrovicivan@ubuntusrbija.org>
+ */
+$lang['menu'] = 'Управљач кориÑницима';
+$lang['noauth'] = '(кориÑничка провера није доÑтупна)';
+$lang['nosupport'] = '(уптављање кориÑницима није подржано)';
+$lang['badauth'] = 'неиÑправан механизам провере';
+$lang['user_id'] = 'КориÑник';
+$lang['user_pass'] = 'Лозинка';
+$lang['user_name'] = 'Име и презиме';
+$lang['user_mail'] = 'Е-адреÑа';
+$lang['user_groups'] = 'Групе';
+$lang['field'] = 'Поље';
+$lang['value'] = 'ВредноÑÑ‚';
+$lang['add'] = 'Додај';
+$lang['delete'] = 'Обриши';
+$lang['delete_selected'] = 'Обриши одабране';
+$lang['edit'] = 'Измени';
+$lang['edit_prompt'] = 'Измени кориÑника';
+$lang['modify'] = 'Сачувај измене';
+$lang['search'] = 'Претрага';
+$lang['search_prompt'] = 'Изведи претрагу';
+$lang['clear'] = 'Поништи филтер претраге';
+$lang['filter'] = 'Филтер';
+$lang['summary'] = 'Приказ %1$d-%2$d од %3$d пронађена кориÑника. Укупно има %4$d кориÑника.';
+$lang['nonefound'] = 'Ðије пронађен кориÑник. Укупно има %d кориÑника.';
+$lang['delete_ok'] = '%d кориÑника је обриÑано';
+$lang['delete_fail'] = '%d бриÑања није уÑпело.';
+$lang['update_ok'] = 'КориÑнички налог је ажуриран';
+$lang['update_fail'] = 'КориÑнички налог није ажуриран';
+$lang['update_exists'] = 'Измена кориÑничког имена није уÑпела, наведени кориÑник (%s) већ поÑтоји (оÑтале измене ће бити примењене).';
+$lang['start'] = 'почетак';
+$lang['prev'] = 'претходна';
+$lang['next'] = 'Ñледећа';
+$lang['last'] = 'крај';
+$lang['edit_usermissing'] = 'Одабрани кориÑник не поÑтоји, наведено кориÑничко име је можда обриÑано или је измењено негде другде.';
+$lang['user_notify'] = 'ОбавеÑти кориÑника';
+$lang['note_notify'] = 'Потврдна порука ће бити поÑлата једино ако је кориÑнику додељена нова лозинка.';
+$lang['note_group'] = 'Ðови кориÑници ће бити додељени подразумеваној групи (%s) ако није другачије назначено.';
+$lang['note_pass'] = 'Ðко Ñте оÑтавили поље празно и укључили обавештавање кориÑника лозинка ће бити аутоматÑки генериÑана.';
+$lang['add_ok'] = 'КориÑник је уÑпешно додат';
+$lang['add_fail'] = 'Додавање кориÑника није уÑпело';
+$lang['notify_ok'] = 'Порука Ñа обавештењен је поÑлата';
+$lang['notify_fail'] = 'Порука Ñа обавештењен није поÑлата';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/list.txt
new file mode 100644
index 000000000..948444245
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/list.txt
@@ -0,0 +1 @@
+===== СпиÑак кориÑника ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/add.txt
new file mode 100644
index 000000000..2ff1ee640
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/add.txt
@@ -0,0 +1 @@
+===== Lägg till användare =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/delete.txt
new file mode 100644
index 000000000..5664a5906
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/delete.txt
@@ -0,0 +1 @@
+===== Radera användare =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/edit.txt
new file mode 100644
index 000000000..f1a7f4a22
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/edit.txt
@@ -0,0 +1 @@
+===== Redigera användare =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/intro.txt
new file mode 100644
index 000000000..bd13b8157
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/intro.txt
@@ -0,0 +1 @@
+====== Hantera användare ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/lang.php
new file mode 100644
index 000000000..cedd30d1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/lang.php
@@ -0,0 +1,58 @@
+<?php
+/**
+ * Swedish language file
+ *
+ * @author Per Foreby <per@foreby.se>
+ * @author Nicklas Henriksson <nicklas[at]nihe.se>
+ * @author HÃ¥kan Sandell <hakan.sandell[at]mydata.se>
+ * @author Dennis Karlsson
+ * @author Tormod Otter Johansson <tormod@latast.se>
+ * @author emil@sys.nu
+ * @author Pontus Bergendahl <pontus.bergendahl@gmail.com>
+ * @author Tormod Johansson tormod.otter.johansson@gmail.com
+ * @author Emil Lind <emil@sys.nu>
+ * @author Bogge Bogge <bogge@bogge.com>
+ * @author Peter Åström <eaustreum@gmail.com>
+ * @author HÃ¥kan Sandell <hakan.sandell@home.se>
+ */
+$lang['menu'] = 'Hantera användare';
+$lang['noauth'] = '(användarautentisering ej tillgänlig)';
+$lang['nosupport'] = '(användarhantering stödjs ej)';
+$lang['badauth'] = 'ogiltig autentiseringsmekanism';
+$lang['user_id'] = 'Användare';
+$lang['user_pass'] = 'Lösenord';
+$lang['user_name'] = 'Namn';
+$lang['user_mail'] = 'E-post';
+$lang['user_groups'] = 'Grupper';
+$lang['field'] = 'Fält';
+$lang['value'] = 'Värde';
+$lang['add'] = 'Lägg till';
+$lang['delete'] = 'Radera';
+$lang['delete_selected'] = 'Radera markerade';
+$lang['edit'] = 'Redigera';
+$lang['edit_prompt'] = 'Redigera användaren';
+$lang['modify'] = 'Spara ändringar';
+$lang['search'] = 'Sök';
+$lang['search_prompt'] = 'Utför sökning';
+$lang['clear'] = 'Återställ sökfilter';
+$lang['filter'] = 'Filter';
+$lang['summary'] = 'Visar användare %1$d-%2$d av %3$d funna. %4$d användare totalt.';
+$lang['nonefound'] = 'Inga användare hittades. %d användare totalt.';
+$lang['delete_ok'] = '%d användare raderade';
+$lang['delete_fail'] = '%d kunde inte raderas.';
+$lang['update_ok'] = 'Användaren uppdaterad';
+$lang['update_fail'] = 'Användaruppdatering misslyckades';
+$lang['update_exists'] = 'Kunde inte ändra användarnamn,, det angivna användarnamnet (%s) finns redan (andra ändringar kommer att utföras).';
+$lang['start'] = 'start';
+$lang['prev'] = 'föregående';
+$lang['next'] = 'nästa';
+$lang['last'] = 'sista';
+$lang['edit_usermissing'] = 'Vald användare hittades inte. Den angivna användaren kan ha blivit raderad, eller ändrats någon annanstans.';
+$lang['user_notify'] = 'Meddela användaren';
+$lang['note_notify'] = 'E-postmeddelanden skickas bara om användaren har fått ett nytt lösenord.';
+$lang['note_group'] = 'Nya användare läggs till i standardgruppen (%s) om inga grupper anges.';
+$lang['note_pass'] = 'Lösenordet kommer att autogenereras om fältet är tomt och e-postmeddelanden till användaren är påslaget.';
+$lang['add_ok'] = 'Användaren tillagd';
+$lang['add_fail'] = 'Användare kunde inte läggas till';
+$lang['notify_ok'] = 'E-postmeddelande skickat';
+$lang['notify_fail'] = 'E-postmeddelande kunde inte skickas';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/list.txt
new file mode 100644
index 000000000..e07c45277
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/list.txt
@@ -0,0 +1 @@
+===== Användarlista =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/add.txt
new file mode 100644
index 000000000..6a5f09855
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/add.txt
@@ -0,0 +1 @@
+====== เพิ่มผู้ใช้ ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/delete.txt
new file mode 100644
index 000000000..4dbc82bf9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/delete.txt
@@ -0,0 +1 @@
+====== ลบผู้ใช้ ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/edit.txt
new file mode 100644
index 000000000..c36e8ddf8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/edit.txt
@@ -0,0 +1 @@
+====== à¹à¸à¹‰à¹„ขผู้ใช้ ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/intro.txt
new file mode 100644
index 000000000..0f6a0c3b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/intro.txt
@@ -0,0 +1 @@
+====== ตัวจัดà¸à¸²à¸£à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰ ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/lang.php
new file mode 100644
index 000000000..eb88d7b91
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/lang.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Thai language file
+ *
+ * @author Komgrit Niyomrath <n.komgrit@gmail.com>
+ * @author Kittithat Arnontavilas mrtomyum@gmail.com
+ * @author Kittithat Arnontavilas <mrtomyum@gmail.com>
+ * @author Thanasak Sompaisansin <jombthep@gmail.com>
+ */
+$lang['menu'] = 'ตัวจัดà¸à¸²à¸£à¸šà¸±à¸à¸Šà¸µà¸œà¸¹à¹‰à¹ƒà¸Šà¹‰';
+$lang['user_id'] = 'ผู้ใช้';
+$lang['user_pass'] = 'รหัสผ่าน';
+$lang['user_name'] = 'ชื่อจริง';
+$lang['user_mail'] = 'อีเมล';
+$lang['user_groups'] = 'à¸à¸¥à¸¸à¹ˆà¸¡';
+$lang['field'] = 'ฟิลด์';
+$lang['value'] = 'ค่า';
+$lang['add'] = 'เพิ่ม';
+$lang['delete'] = 'ลบ';
+$lang['delete_selected'] = 'ลบที่เลือà¸';
+$lang['edit'] = 'à¹à¸à¹‰à¹„ข';
+$lang['edit_prompt'] = 'à¹à¸à¹‰à¹„ขผู้ใช้คนนี้';
+$lang['modify'] = 'บันทึà¸à¸à¸²à¸£à¹à¸à¹‰à¹„ข';
+$lang['search'] = 'สืบค้น';
+$lang['search_prompt'] = 'ทำà¸à¸²à¸£à¸ªà¸·à¸šà¸„้น';
+$lang['clear'] = 'รีเซ็ทตัวà¸à¸£à¸­à¸‡à¸„ำค้น';
+$lang['filter'] = 'ตัวà¸à¸£à¸­à¸‡';
+$lang['summary'] = 'à¹à¸ªà¸”งผู้ใช้ %1$d-%2$d จาà¸à¸—ี่พบ %3$d คน, จาà¸à¸—ั้งหมด %4$d คน';
+$lang['nonefound'] = 'ไม่พบผู้ใช้ จาà¸à¸—ั้งหมด %d คน';
+$lang['delete_ok'] = 'ลบชื่อผู้ใช้ %d คน';
+$lang['delete_fail'] = 'ไม่สามารถลบได้ %d คน';
+$lang['update_ok'] = 'ปรับปรุงข้อมูลผู้ใช้ สำเร็จ';
+$lang['update_fail'] = 'ปรับปรุงข้อมูลผู้ใช้ **ไม่สำเร็จ**';
+$lang['update_exists'] = 'ไม่สามารถเปลี่นชื่อผู้ใช้ได้ ชื่อผู้ใช้ที่ระบุ (%s) มีอยู่à¹à¸¥à¹‰à¸§ (à¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸™à¸™à¹à¸›à¸¥à¸‡à¸­à¸·à¹ˆà¸™à¹† ยังคงทำได้)';
+$lang['start'] = 'เริ่ม';
+$lang['prev'] = 'à¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²';
+$lang['next'] = 'ถัดไป';
+$lang['last'] = 'สุดท้าย';
+$lang['edit_usermissing'] = 'หาผู้ใช้ที่เลือà¸à¹„ม่พบ, ชื่อผุ้ใช้ที่ระบุอาจจะถูà¸à¸¥à¸š หรือเปลี่ยนเป็นอย่างอื่น';
+$lang['user_notify'] = 'à¹à¸ˆà¹‰à¸‡à¹€à¸•à¸·à¸­à¸™à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰';
+$lang['note_notify'] = 'จดหมายà¹à¸ˆà¹‰à¸‡à¹€à¸•à¸·à¸­à¸™à¸–ูà¸à¸ªà¹ˆà¸‡à¸à¹‡à¸•à¹ˆà¸­à¹€à¸¡à¸·à¹ˆà¸­à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¹„ด้รับมอบรหัสผ่านใหม่';
+$lang['note_group'] = 'ผู้ใช้ใหม่จะถูà¸à¹€à¸žà¸´à¹ˆà¸¡à¹€à¸‚้าไปยังà¸à¸¥à¸¸à¹ˆà¸¡à¸›à¸£à¸´à¸¢à¸²à¸¢ (%s) หาà¸à¸¡à¸´à¹„ด้ระบุà¸à¸¥à¸¸à¹ˆà¸¡à¹€à¸­à¸²à¹„ว้';
+$lang['note_pass'] = 'รหัสผ่านจะถูà¸à¸ªà¸£à¹‰à¸²à¸‡à¹‚ดยอัตโนมัติ ถ้าเว้นว่างช่องà¸à¸£à¸­à¸ à¹à¸¥à¸°à¹€à¸›à¸´à¸”à¸à¸²à¸£à¹à¸ˆà¹‰à¸‡à¹€à¸•à¸·à¸­à¸™à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¹€à¸­à¸²à¹„ว้';
+$lang['add_ok'] = 'à¸à¸²à¸£à¹€à¸žà¸´à¹ˆà¸¡à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸ªà¸³à¹€à¸£à¹‡à¸ˆ';
+$lang['add_fail'] = 'à¸à¸²à¸£à¹€à¸žà¸´à¹ˆà¸¡à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸¥à¹‰à¸¡à¹€à¸«à¸¥à¸§';
+$lang['notify_ok'] = 'ส่งจดหมายà¹à¸ˆà¹‰à¸‡à¹€à¸•à¸·à¸­à¸™à¹„ปà¹à¸¥à¹‰à¸§';
+$lang['notify_fail'] = 'ไม่สามารถส่งจดหมายà¹à¸ˆà¹‰à¸‡à¹€à¸•à¸·à¸­à¸™';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/list.txt
new file mode 100644
index 000000000..fdf65b555
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/list.txt
@@ -0,0 +1 @@
+====== รายชื่อผู้ใช้ ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/add.txt
new file mode 100644
index 000000000..beedc0be0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/add.txt
@@ -0,0 +1 @@
+===== Kullanıcı ekleme ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/delete.txt
new file mode 100644
index 000000000..adb8e91e4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/delete.txt
@@ -0,0 +1 @@
+===== Kullanıcı silme ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/edit.txt
new file mode 100644
index 000000000..d9f3b7125
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/edit.txt
@@ -0,0 +1 @@
+===== Kullanıcı Düzenleme ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/intro.txt
new file mode 100644
index 000000000..1edcb2ce0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/intro.txt
@@ -0,0 +1 @@
+====== Kullanıcı Yöneticisi ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/lang.php
new file mode 100644
index 000000000..28127d9d0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/lang.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Turkish language file
+ *
+ * @author Aydın Coşkuner aydinweb@gmail.com
+ * @author Aydın Coşkuner <aydinweb@gmail.com>
+ * @author yavuzselim@gmail.com
+ * @author Cihan Kahveci kahvecicihan@gmail.com
+ * @author Yavuz Selim <yavuzselim@gmail.com>
+ */
+$lang['menu'] = 'Kullanıcı Yönetimi';
+$lang['noauth'] = '(kullanıcı onaylaması yoktur)';
+$lang['nosupport'] = '(kullanıcı yönetimi desteklenmemektedir)';
+$lang['badauth'] = 'yanlış onaylama metodu';
+$lang['user_id'] = 'Kullanıcı';
+$lang['user_pass'] = 'Åžifre';
+$lang['user_name'] = 'Gerçek İsim';
+$lang['user_mail'] = 'Email';
+$lang['user_groups'] = 'Gruplar';
+$lang['field'] = 'Alan';
+$lang['value'] = 'DeÄŸer';
+$lang['add'] = 'Ekle';
+$lang['delete'] = 'Sil';
+$lang['delete_selected'] = 'Seçilenleri Sil';
+$lang['edit'] = 'Düzenle';
+$lang['edit_prompt'] = 'Bu kullanıcıyı düzenle';
+$lang['modify'] = 'DeÄŸiÅŸiklikleri kaydet';
+$lang['search'] = 'Arama';
+$lang['search_prompt'] = 'Aramayı Gerçekleştir';
+$lang['clear'] = 'Arama ayarlarını sıfırla';
+$lang['filter'] = 'Filtre';
+$lang['summary'] = 'Bulunan %3$d kullanıcının %1$d-%2$d gösterilmektedir. Toplam %4$d kullanıcı bulunmaktadır.';
+$lang['nonefound'] = 'Hiç kullanıcı bulunamadı. Toplam %d kullanıcı bulunmaktadır.';
+$lang['delete_ok'] = '%d kullanıcılar silindi';
+$lang['delete_fail'] = '%d silinemedi.';
+$lang['update_ok'] = 'Kullanıcı başarı ile güncelleştirildi';
+$lang['update_fail'] = 'Kullanıcı güncelleştirilemedi';
+$lang['update_exists'] = 'Kullanıcı adı değiştirilemedi. Belirtilen kullanıcı adı (%s) zaten bulunmaktadır (yapılan diğer değişiklikler uygulanacaktır).';
+$lang['start'] = 'baÅŸla';
+$lang['prev'] = 'önceki';
+$lang['next'] = 'sonraki';
+$lang['last'] = 'sonuncu';
+$lang['edit_usermissing'] = 'Seçili kullanıcılar bulunamadı, belirtilen kullanıcı silinmiş ya da değiştirilmiş olabilir.';
+$lang['user_notify'] = 'Kullanıcıyı bilgilendir';
+$lang['note_notify'] = 'Bilgilendirme e-postaları sadece kullanıcıya yeni bir parola verildiğinde gönderilmektedir.';
+$lang['note_group'] = 'Yeni kullanıcılar bir grup belirtilmezse varsayılan (%s) gruba eklenecektir.';
+$lang['note_pass'] = 'Eğer alan boş bırakılırsa parola otomatik oluşturulacaktır ve kullanıcı bilgilendirme etkinleştirilecektir. ';
+$lang['add_ok'] = 'Kullanıcı başarı ile eklendi';
+$lang['add_fail'] = 'Kullanıcı ekleme başarısız';
+$lang['notify_ok'] = 'Bildirim emaili gönderildi';
+$lang['notify_fail'] = 'Bildirim emaili gönderilemedi';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/list.txt
new file mode 100644
index 000000000..2314eb22f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/list.txt
@@ -0,0 +1 @@
+===== Kullanıcı Listesi ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/add.txt
new file mode 100644
index 000000000..bc3469714
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/add.txt
@@ -0,0 +1 @@
+===== Додати кориÑтувача =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/delete.txt
new file mode 100644
index 000000000..739340b19
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/delete.txt
@@ -0,0 +1 @@
+===== Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувача =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/edit.txt
new file mode 100644
index 000000000..e359f748c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/edit.txt
@@ -0,0 +1 @@
+===== Змінити кориÑтувача =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/intro.txt
new file mode 100644
index 000000000..b658affe5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/intro.txt
@@ -0,0 +1 @@
+====== ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувачами ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/lang.php
new file mode 100644
index 000000000..7e9f9167e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/lang.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * ukrainian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Oleksiy Voronin <ovoronin@gmail.com>
+ * @author serg_stetsuk@ukr.net
+ * @author okunia@gmail.com
+ * @author Oleksandr Kunytsia <okunia@gmail.com>
+ * @author Uko uko@uar.net
+ */
+$lang['menu'] = 'ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувачами';
+$lang['noauth'] = '(Ð°Ð²Ñ‚ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ ÐºÐ¾Ñ€Ð¸Ñтувачів не доÑтупна)';
+$lang['nosupport'] = '(ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувачами не підтримуєтьÑÑ)';
+$lang['badauth'] = 'невірний механізм автентифікації';
+$lang['user_id'] = 'Ð†Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача';
+$lang['user_pass'] = 'Пароль';
+$lang['user_name'] = 'Повне ім’Ñ';
+$lang['user_mail'] = 'E-mail';
+$lang['user_groups'] = 'Групи';
+$lang['field'] = 'Поле';
+$lang['value'] = 'ЗначеннÑ';
+$lang['add'] = 'Додати';
+$lang['delete'] = 'Видалити';
+$lang['delete_selected'] = 'Видалити вибраних';
+$lang['edit'] = 'Змінити';
+$lang['edit_prompt'] = 'Змінити цього кориÑтувача';
+$lang['modify'] = 'Зберегти зміни';
+$lang['search'] = 'Пошук';
+$lang['search_prompt'] = 'Шукати';
+$lang['clear'] = 'ОчиÑтити фільтр пошуку';
+$lang['filter'] = 'Фільтр';
+$lang['summary'] = 'Показано кориÑтувачі %1$d-%2$d з %3$d знайдених. Ð’Ñього кориÑтувачів: %4$d.';
+$lang['nonefound'] = 'Ðе знайдено жодного кориÑтувача. Ð’Ñього кориÑтувачів: %d.';
+$lang['delete_ok'] = 'Видалено кориÑтувачів: %d';
+$lang['delete_fail'] = 'Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ %d.';
+$lang['update_ok'] = 'Дані кориÑтувача оновлено';
+$lang['update_fail'] = 'Ðе вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ дані кориÑтувача';
+$lang['update_exists'] = 'Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ Ñ–Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача, такий кориÑтувач (%s) вже Ñ–Ñнує (вÑÑ– інші зміни будуть заÑтоÑовані).';
+$lang['start'] = 'на початок';
+$lang['prev'] = 'назад';
+$lang['next'] = 'вперед';
+$lang['last'] = 'в кінець';
+$lang['edit_usermissing'] = 'Обраного кориÑтувача не знайдено, можливо його було вилучено або змінено ще деÑÑŒ.';
+$lang['user_notify'] = 'Повідомити кориÑтувача';
+$lang['note_notify'] = 'ЛиÑти з повідомленнÑми відÑилаютьÑÑ Ð»Ð¸ÑˆÐµ у випадку видачі нового Ð¿Ð°Ñ€Ð¾Ð»Ñ ÐºÐ¾Ñ€Ð¸Ñтувачу.';
+$lang['note_group'] = 'Якщо не визначено групи, то нові кориÑтувачі будуть автоматично додані до групи за замовчуваннÑм (%s).';
+$lang['note_pass'] = 'Пароль буде згенеровано автоматично, Ñкщо поле Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð½Ðµ заповнено Ñ– увімкнено прапорець "повідомити кориÑтувача".';
+$lang['add_ok'] = 'КориÑтувача додано';
+$lang['add_fail'] = 'Ðеможливо додати кориÑтувача';
+$lang['notify_ok'] = 'ЛиÑта з повідомленнÑм надіÑлано';
+$lang['notify_fail'] = 'Ðеможливо виÑлати лиÑта з повідомленнÑм';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/list.txt
new file mode 100644
index 000000000..76013a9b7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/list.txt
@@ -0,0 +1 @@
+===== СпиÑок кориÑтувачів =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/add.txt
new file mode 100644
index 000000000..6e25f1719
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/add.txt
@@ -0,0 +1 @@
+===== 增加帳號 =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/delete.txt
new file mode 100644
index 000000000..1a29ba349
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/delete.txt
@@ -0,0 +1 @@
+===== 刪除帳號 =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/edit.txt
new file mode 100644
index 000000000..ec1c5d5ec
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/edit.txt
@@ -0,0 +1 @@
+===== 修改帳號 =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/intro.txt
new file mode 100644
index 000000000..9c499d862
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/intro.txt
@@ -0,0 +1 @@
+====== 帳號管ç†å“¡(User Manager) ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/lang.php
new file mode 100644
index 000000000..26c87205d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/lang.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * English language file
+ *
+ * @author chinsan <chinsan.tw@gmail.com>
+ * @author Li-Jiun Huang <ljhuang.tw@gmail.com>
+ * @author http://www.chinese-tools.com/tools/converter-simptrad.html
+ * @author Wayne San <waynesan@zerozone.tw>
+ * @author Li-Jiun Huang <ljhuang.tw@gmai.com>
+ * @author Cheng-Wei Chien <e.cwchien@gmail.com>
+ */
+$lang['menu'] = '帳號管ç†å“¡(User Manager)';
+$lang['noauth'] = '(帳號èªè­‰å°šæœªé–‹æ”¾)';
+$lang['nosupport'] = '(å°šä¸æ”¯æ´å¸³è™Ÿç®¡ç†)';
+$lang['badauth'] = '錯誤的èªè­‰æ©Ÿåˆ¶';
+$lang['user_id'] = '帳號';
+$lang['user_pass'] = '密碼';
+$lang['user_name'] = '真實姓å';
+$lang['user_mail'] = 'E-mail';
+$lang['user_groups'] = '群組';
+$lang['field'] = '欄ä½';
+$lang['value'] = '設定值';
+$lang['add'] = '增加';
+$lang['delete'] = '刪除';
+$lang['delete_selected'] = '刪除所é¸çš„';
+$lang['edit'] = '修改';
+$lang['edit_prompt'] = '修改該帳號';
+$lang['modify'] = '儲存變更';
+$lang['search'] = 'æœå°‹';
+$lang['search_prompt'] = '開始æœå°‹';
+$lang['clear'] = 'é‡æ–°è¨­å®šæœå°‹çš„æ¢ä»¶';
+$lang['filter'] = '篩é¸æ¢ä»¶(Filter)';
+$lang['summary'] = '顯示帳號 %1$d 至 %2$d å…± %3$d 筆符åˆ. 總共有 %4$d 個帳號';
+$lang['nonefound'] = '找ä¸åˆ°è©²ç”¨æˆ¶(å…± %d 帳號)。';
+$lang['delete_ok'] = '已刪除 %d 個帳號';
+$lang['delete_fail'] = '%d 個帳號刪除失敗';
+$lang['update_ok'] = 'æˆåŠŸæ›´æ–°è©²å¸³è™Ÿ';
+$lang['update_fail'] = '更新該帳號時失敗';
+$lang['update_exists'] = '變更帳號å稱 (%s) 時失敗,應該是已有åŒå的帳號,ä¸éŽé™¤äº†å¸³è™Ÿå稱之外的其他修改ä»æœƒå„²å­˜ã€‚';
+$lang['start'] = '開始';
+$lang['prev'] = '上一步';
+$lang['next'] = '下一步';
+$lang['last'] = '最後步驟';
+$lang['edit_usermissing'] = '找ä¸åˆ°æ‰€é¸çš„帳號,該帳號å¯èƒ½å·²ç¶“被刪除或是改為其他å稱喔。';
+$lang['user_notify'] = '通知使用者';
+$lang['note_notify'] = '通知信åªæœ‰åœ¨çµ¦äºˆä½¿ç”¨è€…新密碼時寄é€ã€‚';
+$lang['note_group'] = '如果沒有指定群組,新使用者將會被加入到é è¨­ç¾¤çµ„(%s)當中。';
+$lang['note_pass'] = '如果沒有輸入這個欄ä½è€Œä¸”有勾é¸é€šçŸ¥ä½¿ç”¨è€…,則會自動產生一組密碼。';
+$lang['add_ok'] = '新增使用者æˆåŠŸ';
+$lang['add_fail'] = '新增使用者失敗';
+$lang['notify_ok'] = '通知信已寄出';
+$lang['notify_fail'] = '通知信無法被寄出';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/list.txt
new file mode 100644
index 000000000..1e539bd41
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/list.txt
@@ -0,0 +1 @@
+===== 帳號清單 =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/add.txt
new file mode 100644
index 000000000..fd3b1e581
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/add.txt
@@ -0,0 +1 @@
+===== 添加用户 =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/delete.txt
new file mode 100644
index 000000000..dc6b7fcc7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/delete.txt
@@ -0,0 +1 @@
+===== 删除用户 =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/edit.txt
new file mode 100644
index 000000000..83b72dff7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/edit.txt
@@ -0,0 +1 @@
+===== 编辑用户 =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/intro.txt
new file mode 100644
index 000000000..5f254be72
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/intro.txt
@@ -0,0 +1 @@
+====== 用户管ç†å™¨ ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/lang.php
new file mode 100644
index 000000000..55044ce65
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/lang.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * English language file
+ *
+ * @author ZDYX <zhangduyixiong@gmail.com>
+ * @author http://www.chinese-tools.com/tools/converter-tradsimp.html
+ * @author George Sheraton guxd@163.com
+ * @author Simon zhan <simonzhan@21cn.com>
+ * @author mr.jinyi@gmail.com
+ */
+$lang['menu'] = '用户管ç†å™¨';
+$lang['noauth'] = '(用户认è¯ä¸å¯ç”¨ï¼‰';
+$lang['nosupport'] = '(用户管ç†ä¸æ”¯æŒï¼‰';
+$lang['badauth'] = 'éžæ³•çš„认è¯ç»“æž„';
+$lang['user_id'] = '用户å';
+$lang['user_pass'] = '密ç ';
+$lang['user_name'] = '真实姓å';
+$lang['user_mail'] = 'Email';
+$lang['user_groups'] = '组 *';
+$lang['field'] = 'æ ç›®';
+$lang['value'] = '值';
+$lang['add'] = '添加';
+$lang['delete'] = '删除';
+$lang['delete_selected'] = '删除选中的';
+$lang['edit'] = '编辑';
+$lang['edit_prompt'] = '编辑该用户';
+$lang['modify'] = 'ä¿å­˜æ›´æ”¹';
+$lang['search'] = 'æœç´¢';
+$lang['search_prompt'] = '进行æœç´¢';
+$lang['clear'] = 'é‡ç½®æœç´¢è¿‡æ»¤å™¨';
+$lang['filter'] = '过滤器';
+$lang['summary'] = '找到 %3$d å用户,显示其中第 %1$d 至 %2$d ä½ç”¨æˆ·ã€‚æ•°æ®åº“中共有 %4$d å用户。';
+$lang['nonefound'] = '没有找到用户。数æ®åº“中共有 %d å用户。';
+$lang['delete_ok'] = '用户 %d 已删除';
+$lang['delete_fail'] = '用户 %d 删除失败。';
+$lang['update_ok'] = '用户更新æˆåŠŸ';
+$lang['update_fail'] = '用户更新失败';
+$lang['update_exists'] = '用户å更改失败,您指定的用户å(%s)已存在(其他更改将立å³ç”Ÿæ•ˆï¼‰ã€‚';
+$lang['start'] = '第一页';
+$lang['prev'] = 'å‰ä¸€é¡µ';
+$lang['next'] = 'åŽä¸€é¡µ';
+$lang['last'] = '最åŽä¸€é¡µ';
+$lang['edit_usermissing'] = '您指定的用户没有找到,å¯èƒ½ç”¨æˆ·å·²è¢«åˆ é™¤æˆ–用户å已更改。';
+$lang['user_notify'] = '通知用户';
+$lang['note_notify'] = '通知邮件åªæœ‰åœ¨ç”¨æˆ·èŽ·å¾—新密ç æ—¶æ‰ä¼šå‘é€ã€‚';
+$lang['note_group'] = '* 如果没有指定组,新用户将被添加到默认的组(%s)中。';
+$lang['note_pass'] = '如果输入框留空则自动生æˆå£ä»¤ï¼Œå¹¶ä¼šé€šçŸ¥ç”¨æˆ·ã€‚';
+$lang['add_ok'] = '用户添加æˆåŠŸ';
+$lang['add_fail'] = '用户添加失败';
+$lang['notify_ok'] = '通知邮件已å‘é€';
+$lang['notify_fail'] = '通知邮件无法å‘é€';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/list.txt
new file mode 100644
index 000000000..e62a85bd0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/list.txt
@@ -0,0 +1 @@
+===== 用户列表 =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/script.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/script.js
new file mode 100644
index 000000000..875e4297b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/script.js
@@ -0,0 +1,9 @@
+/**
+ * Add JavaScript confirmation to the User Delete button
+ */
+function usrmgr_delconfirm(){
+ if(DOKUid('usrmgr__del')){
+ addEvent( DOKUid('usrmgr__del'),'click',function(){ return confirm(reallyDel); } );
+ }
+};
+addInitEvent(usrmgr_delconfirm);
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/style.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/style.css
new file mode 100644
index 000000000..ff8e5d9d1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/style.css
@@ -0,0 +1,20 @@
+/* User Manager specific styles */
+#user__manager tr.disabled {
+ color: #6f6f6f;
+ background: #e4e4e4;
+}
+#user__manager tr.user_info {
+ vertical-align: top;
+}
+#user__manager div.edit_user {
+ width: 46%;
+ float: left;
+}
+#user__manager table {
+ margin-bottom: 1em;
+}
+#user__manager input.button[disabled] {
+ color: #ccc!important;
+ border-color: #ccc!important;
+}
+/* IE won't understand but doesn't require it */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/ajax.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/ajax.js
new file mode 100644
index 000000000..a2a48a996
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/ajax.js
@@ -0,0 +1,68 @@
+/**
+ * AJAX functions for the pagename quicksearch
+ *
+ * We're using a global object with self referencing methods
+ * here to make callbacks work
+ *
+ * @license GPL2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+//prepare class
+function ajax_qsearch_class(){
+ this.sack = null;
+ this.inObj = null;
+ this.outObj = null;
+ this.timer = null;
+}
+
+//create global object and add functions
+var ajax_qsearch = new ajax_qsearch_class();
+ajax_qsearch.sack = new sack(DOKU_BASE + 'lib/exe/ajax.php');
+ajax_qsearch.sack.AjaxFailedAlert = '';
+ajax_qsearch.sack.encodeURIString = false;
+
+ajax_qsearch.init = function(inID,outID){
+ ajax_qsearch.inObj = document.getElementById(inID);
+ ajax_qsearch.outObj = document.getElementById(outID);
+
+ // objects found?
+ if(ajax_qsearch.inObj === null){ return; }
+ if(ajax_qsearch.outObj === null){ return; }
+
+ // attach eventhandler to search field
+ addEvent(ajax_qsearch.inObj,'keyup',ajax_qsearch.call);
+
+ // attach eventhandler to output field
+ addEvent(ajax_qsearch.outObj,'click',function(){ ajax_qsearch.outObj.style.display='none'; });
+};
+
+ajax_qsearch.clear = function(){
+ ajax_qsearch.outObj.style.display = 'none';
+ ajax_qsearch.outObj.innerHTML = '';
+ if(ajax_qsearch.timer !== null){
+ window.clearTimeout(ajax_qsearch.timer);
+ ajax_qsearch.timer = null;
+ }
+};
+
+ajax_qsearch.exec = function(){
+ ajax_qsearch.clear();
+ var value = ajax_qsearch.inObj.value;
+ if(value === ''){ return; }
+ ajax_qsearch.sack.runAJAX('call=qsearch&q='+encodeURI(value));
+};
+
+ajax_qsearch.sack.onCompletion = function(){
+ var data = ajax_qsearch.sack.response;
+ if(data === ''){ return; }
+
+ ajax_qsearch.outObj.innerHTML = data;
+ ajax_qsearch.outObj.style.display = 'block';
+};
+
+ajax_qsearch.call = function(){
+ ajax_qsearch.clear();
+ ajax_qsearch.timer = window.setTimeout("ajax_qsearch.exec()",500);
+};
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/cookie.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/cookie.js
new file mode 100644
index 000000000..d7e6b3550
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/cookie.js
@@ -0,0 +1,112 @@
+/**
+ * Handles the cookie used by several JavaScript functions
+ *
+ * Only a single cookie is written and read. You may only save
+ * sime name-value pairs - no complex types!
+ *
+ * You should only use the getValue and setValue methods
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+DokuCookie = {
+ data: Array(),
+ name: 'DOKU_PREFS',
+
+ /**
+ * Save a value to the cookie
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ setValue: function(key,val){
+ DokuCookie.init();
+ DokuCookie.data[key] = val;
+
+ // prepare expire date
+ var now = new Date();
+ DokuCookie.fixDate(now);
+ now.setTime(now.getTime() + 365 * 24 * 60 * 60 * 1000); //expire in a year
+
+ //save the whole data array
+ var text = '';
+ for(var key in DokuCookie.data){
+ if (!DokuCookie.data.hasOwnProperty(key)) continue;
+ text += '#'+escape(key)+'#'+DokuCookie.data[key];
+ }
+ DokuCookie.setCookie(DokuCookie.name,text.substr(1),now,DOKU_BASE);
+ },
+
+ /**
+ * Get a Value from the Cookie
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ getValue: function(key){
+ DokuCookie.init();
+ return DokuCookie.data[key];
+ },
+
+ /**
+ * Loads the current set cookie
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ init: function(){
+ if(DokuCookie.data.length) return;
+ var text = DokuCookie.getCookie(DokuCookie.name);
+ if(text){
+ var parts = text.split('#');
+ for(var i=0; i<parts.length; i+=2){
+ DokuCookie.data[unescape(parts[i])] = unescape(parts[i+1]);
+ }
+ }
+ },
+
+ /**
+ * This sets a cookie by JavaScript
+ *
+ * @link http://www.webreference.com/js/column8/functions.html
+ */
+ setCookie: function(name, value, expires, path, domain, secure) {
+ var curCookie = name + "=" + escape(value) +
+ ((expires) ? "; expires=" + expires.toGMTString() : "") +
+ ((path) ? "; path=" + path : "") +
+ ((domain) ? "; domain=" + domain : "") +
+ ((secure) ? "; secure" : "");
+ document.cookie = curCookie;
+ },
+
+ /**
+ * This reads a cookie by JavaScript
+ *
+ * @link http://www.webreference.com/js/column8/functions.html
+ */
+ getCookie: function(name) {
+ var dc = document.cookie;
+ var prefix = name + "=";
+ var begin = dc.indexOf("; " + prefix);
+ if (begin == -1) {
+ begin = dc.indexOf(prefix);
+ if (begin !== 0){ return null; }
+ } else {
+ begin += 2;
+ }
+ var end = document.cookie.indexOf(";", begin);
+ if (end == -1){
+ end = dc.length;
+ }
+ return unescape(dc.substring(begin + prefix.length, end));
+ },
+
+ /**
+ * This is needed for the cookie functions
+ *
+ * @link http://www.webreference.com/js/column8/functions.html
+ */
+ fixDate: function(date) {
+ var base = new Date(0);
+ var skew = base.getTime();
+ if (skew > 0){
+ date.setTime(date.getTime() - skew);
+ }
+ }
+};
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/drag.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/drag.js
new file mode 100644
index 000000000..908ab670c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/drag.js
@@ -0,0 +1,99 @@
+/**
+ * Makes a DOM object draggable
+ *
+ * This is currently for movable DOM dialogs only. If needed it could be
+ * extended to execute callbacks on special events...
+ *
+ * @link http://nofunc.org/Drag_Drop/
+ */
+var drag = {
+ obj: null,
+ handle: null,
+ oX: 0, // object X position
+ oY: 0, // object Y position
+ eX: 0, // event X delta
+ eY: 0, // event Y delta
+
+ /**
+ * Attaches the needed handlers to the given object
+ *
+ * This can be called for multiple objects, the right one is later
+ * determined from the event itself. The handle is optional
+ *
+ * @param DOMObject obj The object that should be draggable
+ * @param DOMObject handle A handle on which the obj can be dragged
+ */
+ attach: function (obj,handle) {
+ if(handle){
+ handle.dragobject = obj;
+ addEvent(DOKUid(handle),'mousedown',drag.start);
+ }else{
+ addEvent(DOKUid(obj),'mousedown',drag.start);
+ }
+ },
+
+ /**
+ * Starts the dragging operation
+ */
+ start: function (e){
+ drag.handle = e.target;
+ if(drag.handle.dragobject){
+ drag.obj = drag.handle.dragobject;
+ }else{
+ drag.obj = drag.handle;
+ }
+
+ drag.handle.className += ' ondrag';
+ drag.obj.className += ' ondrag';
+
+ drag.oX = parseInt(drag.obj.style.left);
+ drag.oY = parseInt(drag.obj.style.top);
+ drag.eX = drag.evX(e);
+ drag.eY = drag.evY(e);
+
+ addEvent(document,'mousemove',drag.drag);
+ addEvent(document,'mouseup',drag.stop);
+
+ e.preventDefault();
+ e.stopPropagation();
+ return false;
+ },
+
+ /**
+ * Ends the dragging operation
+ */
+ stop: function(){
+ drag.handle.className = drag.handle.className.replace(/ ?ondrag/,'');
+ drag.obj.className = drag.obj.className.replace(/ ?ondrag/,'');
+ removeEvent(document,'mousemove',drag.drag);
+ removeEvent(document,'mouseup',drag.stop);
+ drag.obj = null;
+ drag.handle = null;
+ },
+
+ /**
+ * Moves the object during the dragging operation
+ */
+ drag: function(e) {
+ if(drag.obj) {
+ drag.obj.style.top = (drag.evY(e)+drag.oY-drag.eY+'px');
+ drag.obj.style.left = (drag.evX(e)+drag.oX-drag.eX+'px');
+ }
+ },
+
+ /**
+ * Returns the X position of the given event.
+ */
+ evX: function(e){
+ return (e.pageX) ? e.pageX : e.clientX + document.body.scrollTop; //fixme shouldn't this be scrollLeft?
+ },
+
+ /**
+ * Returns the Y position of the given event.
+ */
+ evY: function(e){
+ return (e.pageY) ? e.pageY : e.clientY + document.body.scrollTop;
+ }
+
+};
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/edit.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/edit.js
new file mode 100644
index 000000000..6494a925f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/edit.js
@@ -0,0 +1,442 @@
+/**
+ * Functions for text editing (toolbar stuff)
+ *
+ * @todo most of the stuff in here should be revamped and then moved to toolbar.js
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+/**
+ * Creates a toolbar button through the DOM
+ *
+ * Style the buttons through the toolbutton class
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function createToolButton(icon,label,key,id){
+ var btn = document.createElement('button');
+ var ico = document.createElement('img');
+
+ // preapare the basic button stuff
+ btn.className = 'toolbutton';
+ btn.title = label;
+ if(key){
+ btn.title += ' ['+key.toUpperCase()+']';
+ btn.accessKey = key;
+ }
+
+ // set IDs if given
+ if(id){
+ btn.id = id;
+ ico.id = id+'_ico';
+ }
+
+ // create the icon and add it to the button
+ if(icon.substr(0,1) == '/'){
+ ico.src = icon;
+ }else{
+ ico.src = DOKU_MEDIA+'lib/images/toolbar/'+icon;
+ }
+ btn.appendChild(ico);
+
+ return btn;
+}
+
+/**
+ * Creates a picker window for inserting text
+ *
+ * The given list can be an associative array with text,icon pairs
+ * or a simple list of text. Style the picker window through the picker
+ * class or the picker buttons with the pickerbutton class. Picker
+ * windows are appended to the body and created invisible.
+ *
+ * @param string id the ID to assign to the picker
+ * @param array props the properties for the picker
+ * @param string edid the ID of the textarea
+ * @rteurn DOMobject the created picker
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function createPicker(id,props,edid){
+ var icobase = props['icobase'];
+ var list = props['list'];
+
+ // create the wrapping div
+ var picker = document.createElement('div');
+ picker.className = 'picker';
+ if(props['class']){
+ picker.className += ' '+props['class'];
+ }
+ picker.id = id;
+ picker.style.position = 'absolute';
+ picker.style.marginLeft = '-10000px'; // no display:none, to keep access keys working
+
+ for(var key in list){
+ if (!list.hasOwnProperty(key)) continue;
+
+ if(isNaN(key)){
+ // associative array -> treat as image/value pairs
+ var btn = document.createElement('button');
+ btn.className = 'pickerbutton';
+ var ico = document.createElement('img');
+ if(list[key].substr(0,1) == '/'){
+ ico.src = list[key];
+ }else{
+ ico.src = DOKU_MEDIA+'lib/images/'+icobase+'/'+list[key];
+ }
+ btn.title = key;
+ btn.appendChild(ico);
+ addEvent(btn,'click',bind(pickerInsert,key,edid));
+ picker.appendChild(btn);
+ }else if(isString(list[key])){
+ // a list of text -> treat as text picker
+ var btn = document.createElement('button');
+ btn.className = 'pickerbutton';
+ var txt = document.createTextNode(list[key]);
+ btn.title = list[key];
+ btn.appendChild(txt);
+ addEvent(btn,'click',bind(pickerInsert,list[key],edid));
+ picker.appendChild(btn);
+ }else{
+ // a list of lists -> treat it as subtoolbar
+ initToolbar(picker,edid,list);
+ break; // all buttons handled already
+ }
+
+ }
+ var body = document.getElementsByTagName('body')[0];
+ body.appendChild(picker);
+ return picker;
+}
+
+/**
+ * Called by picker buttons to insert Text and close the picker again
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function pickerInsert(text,edid){
+ insertAtCarret(edid,text);
+ pickerClose();
+}
+
+/**
+ * Add button action for signature button
+ *
+ * @param DOMElement btn Button element to add the action to
+ * @param array props Associative array of button properties
+ * @param string edid ID of the editor textarea
+ * @return boolean If button should be appended
+ * @author Gabriel Birke <birke@d-scribe.de>
+ */
+function addBtnActionSignature(btn, props, edid) {
+ if(typeof(SIG) != 'undefined' && SIG != ''){
+ addEvent(btn,'click',bind(insertAtCarret,edid,SIG));
+ return true;
+ }
+ return false;
+}
+
+/**
+ * Make intended formattings easier to handle
+ *
+ * Listens to all key inputs and handle indentions
+ * of lists and code blocks
+ *
+ * Currently handles space, backspce and enter presses
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @fixme handle tabs
+ */
+function keyHandler(e){
+ if(e.keyCode != 13 &&
+ e.keyCode != 8 &&
+ e.keyCode != 32) return;
+ var field = e.target;
+ var selection = getSelection(field);
+ var search = "\n"+field.value.substr(0,selection.start);
+ var linestart = Math.max(search.lastIndexOf("\n"),
+ search.lastIndexOf("\r")); //IE workaround
+ search = search.substr(linestart);
+
+
+ if(e.keyCode == 13){ // Enter
+ // keep current indention for lists and code
+ var match = search.match(/(\n +([\*-] ?)?)/);
+ if(match){
+ var scroll = field.scrollHeight;
+ insertAtCarret(field.id,match[1]);
+ field.scrollTop += (field.scrollHeight - scroll);
+ e.preventDefault(); // prevent enter key
+ return false;
+ }
+ }else if(e.keyCode == 8){ // Backspace
+ // unindent lists
+ var match = search.match(/(\n +)([*-] ?)$/);
+ if(match){
+ var spaces = match[1].length-1;
+
+ if(spaces > 3){ // unindent one level
+ field.value = field.value.substr(0,linestart)+
+ field.value.substr(linestart+2);
+ selection.start = selection.start - 2;
+ selection.end = selection.start;
+ }else{ // delete list point
+ field.value = field.value.substr(0,linestart)+
+ field.value.substr(selection.start);
+ selection.start = linestart;
+ selection.end = linestart;
+ }
+ setSelection(selection);
+ e.preventDefault(); // prevent backspace
+ return false;
+ }
+ }else if(e.keyCode == 32){ // Space
+ // intend list item
+ var match = search.match(/(\n +)([*-] )$/);
+ if(match){
+ field.value = field.value.substr(0,linestart)+' '+
+ field.value.substr(linestart);
+ selection.start = selection.start + 2;
+ selection.end = selection.start;
+ setSelection(selection);
+ e.preventDefault(); // prevent space
+ return false;
+ }
+ }
+}
+
+//FIXME consolidate somewhere else
+addInitEvent(function(){
+ var field = DOKUid('wiki__text');
+ if(!field) return;
+ addEvent(field,'keydown',keyHandler);
+});
+
+/**
+ * Determine the current section level while editing
+ *
+ * @author Andreas Gohr <gohr@cosmocode.de>
+ */
+function currentHeadlineLevel(textboxId){
+ var field = DOKUid(textboxId);
+ var selection = getSelection(field);
+ var search = "\n"+field.value.substr(0,selection.start);
+ var lasthl = search.lastIndexOf("\n==");
+ if(lasthl == -1 && field.form.prefix){
+ // we need to look in prefix context
+ search = field.form.prefix.value;
+ lasthl = search.lastIndexOf("\n==");
+ }
+ search = search.substr(lasthl+1,6);
+
+ if(search == '======') return 1;
+ if(search.substr(0,5) == '=====') return 2;
+ if(search.substr(0,4) == '====') return 3;
+ if(search.substr(0,3) == '===') return 4;
+ if(search.substr(0,2) == '==') return 5;
+
+ return 0;
+}
+
+
+/**
+ * global var used for not saved yet warning
+ */
+var textChanged = false;
+
+/**
+ * Check for changes before leaving the page
+ */
+function changeCheck(msg){
+ if(textChanged){
+ var ok = confirm(msg);
+ if(ok){
+ // remove a possibly saved draft using ajax
+ var dwform = DOKUid('dw__editform');
+ if(dwform){
+ var params = 'call=draftdel';
+ params += '&id='+encodeURIComponent(dwform.elements.id.value);
+
+ var sackobj = new sack(DOKU_BASE + 'lib/exe/ajax.php');
+ sackobj.AjaxFailedAlert = '';
+ sackobj.encodeURIString = false;
+ sackobj.runAJAX(params);
+ // we send this request blind without waiting for
+ // and handling the returned data
+ }
+ }
+ return ok;
+ }else{
+ return true;
+ }
+}
+
+/**
+ * Add changeCheck to all Links and Forms (except those with a
+ * JSnocheck class), add handlers to monitor changes
+ *
+ * Sets focus to the editbox as well
+ *
+ * @fixme this is old and crappy code. needs to be redone
+ */
+function initChangeCheck(msg){
+ var edit_text = document.getElementById('wiki__text');
+ if(!edit_text) return;
+ if(edit_text.readOnly) return;
+ if(!DOKUid('dw__editform')) return;
+
+ // add change check for links
+ var links = document.getElementsByTagName('a');
+ for(var i=0; i < links.length; i++){
+ if(links[i].className.indexOf('JSnocheck') == -1){
+ links[i].onclick = function(){
+ var rc = changeCheck(msg);
+ if(window.event) window.event.returnValue = rc;
+ return rc;
+ };
+ }
+ }
+ // add change check for forms
+ var forms = document.forms;
+ for(i=0; i < forms.length; i++){
+ if(forms[i].className.indexOf('JSnocheck') == -1){
+ forms[i].onsubmit = function(){
+ var rc = changeCheck(msg);
+ if(window.event) window.event.returnValue = rc;
+ return rc;
+ };
+ }
+ }
+
+ // reset change memory var on submit
+ var btn_save = document.getElementById('edbtn__save');
+ btn_save.onclick = function(){ textChanged = false; };
+ var btn_prev = document.getElementById('edbtn__preview');
+ btn_prev.onclick = function(){ textChanged = false; };
+
+ // add change memory setter
+ edit_text.onchange = function(){
+ textChanged = true; //global var
+ summaryCheck();
+ };
+ var summary = document.getElementById('edit__summary');
+ addEvent(summary, 'change', summaryCheck);
+ addEvent(summary, 'keyup', summaryCheck);
+ if (textChanged) summaryCheck();
+
+ // set focus
+ edit_text.focus();
+}
+
+/**
+ * Checks if a summary was entered - if not the style is changed
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function summaryCheck(){
+ var sum = document.getElementById('edit__summary');
+ if(sum.value === ''){
+ sum.className='missing';
+ }else{
+ sum.className='edit';
+ }
+}
+
+
+/**
+ * Class managing the timer to display a warning on a expiring lock
+ */
+function locktimer_class(){
+ this.sack = null;
+ this.timeout = 0;
+ this.timerID = null;
+ this.lasttime = null;
+ this.msg = '';
+ this.pageid = '';
+};
+var locktimer = new locktimer_class();
+ locktimer.init = function(timeout,msg,draft){
+ // init values
+ locktimer.timeout = timeout*1000;
+ locktimer.msg = msg;
+ locktimer.draft = draft;
+ locktimer.lasttime = new Date();
+
+ if(!DOKUid('dw__editform')) return;
+ locktimer.pageid = DOKUid('dw__editform').elements.id.value;
+ if(!locktimer.pageid) return;
+
+ // init ajax component
+ locktimer.sack = new sack(DOKU_BASE + 'lib/exe/ajax.php');
+ locktimer.sack.AjaxFailedAlert = '';
+ locktimer.sack.encodeURIString = false;
+ locktimer.sack.onCompletion = locktimer.refreshed;
+
+ // register refresh event
+ addEvent(DOKUid('dw__editform').elements.wikitext,'keypress',function(){locktimer.refresh();});
+
+ // start timer
+ locktimer.reset();
+ };
+
+ /**
+ * (Re)start the warning timer
+ */
+ locktimer.reset = function(){
+ locktimer.clear();
+ locktimer.timerID = window.setTimeout("locktimer.warning()", locktimer.timeout);
+ };
+
+ /**
+ * Display the warning about the expiring lock
+ */
+ locktimer.warning = function(){
+ locktimer.clear();
+ alert(locktimer.msg);
+ };
+
+ /**
+ * Remove the current warning timer
+ */
+ locktimer.clear = function(){
+ if(locktimer.timerID !== null){
+ window.clearTimeout(locktimer.timerID);
+ locktimer.timerID = null;
+ }
+ };
+
+ /**
+ * Refresh the lock via AJAX
+ *
+ * Called on keypresses in the edit area
+ */
+ locktimer.refresh = function(){
+ var now = new Date();
+ // refresh every minute only
+ if(now.getTime() - locktimer.lasttime.getTime() > 30*1000){ //FIXME decide on time
+ var params = 'call=lock&id='+encodeURIComponent(locktimer.pageid);
+ if(locktimer.draft){
+ var dwform = DOKUid('dw__editform');
+ params += '&prefix='+encodeURIComponent(dwform.elements.prefix.value);
+ params += '&wikitext='+encodeURIComponent(dwform.elements.wikitext.value);
+ params += '&suffix='+encodeURIComponent(dwform.elements.suffix.value);
+ params += '&date='+encodeURIComponent(dwform.elements.date.value);
+ }
+ locktimer.sack.runAJAX(params);
+ locktimer.lasttime = now;
+ }
+ };
+
+
+ /**
+ * Callback. Resets the warning timer
+ */
+ locktimer.refreshed = function(){
+ var data = this.response;
+ var error = data.charAt(0);
+ data = data.substring(1);
+
+ DOKUid('draft__status').innerHTML=data;
+ if(error != '1') return; // locking failed
+ locktimer.reset();
+ };
+// end of locktimer class functions
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/events.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/events.js
new file mode 100644
index 000000000..e7526ced7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/events.js
@@ -0,0 +1,176 @@
+// written by Dean Edwards, 2005
+// with input from Tino Zijdel
+
+// http://dean.edwards.name/weblog/2005/10/add-event/
+
+function addEvent(element, type, handler) {
+ // assign each event handler a unique ID
+ if (!handler.$$guid) handler.$$guid = addEvent.guid++;
+ // create a hash table of event types for the element
+ if (!element.events) element.events = {};
+ // create a hash table of event handlers for each element/event pair
+ var handlers = element.events[type];
+ if (!handlers) {
+ handlers = element.events[type] = {};
+ // store the existing event handler (if there is one)
+ if (element["on" + type]) {
+ handlers[0] = element["on" + type];
+ }
+ }
+ // store the event handler in the hash table
+ handlers[handler.$$guid] = handler;
+ // assign a global event handler to do all the work
+ element["on" + type] = handleEvent;
+};
+// a counter used to create unique IDs
+addEvent.guid = 1;
+
+function removeEvent(element, type, handler) {
+ // delete the event handler from the hash table
+ if (element.events && element.events[type]) {
+ delete element.events[type][handler.$$guid];
+ }
+};
+
+function handleEvent(event) {
+ var returnValue = true;
+ // grab the event object (IE uses a global event object)
+ event = event || fixEvent(window.event);
+ // get a reference to the hash table of event handlers
+ var handlers = this.events[event.type];
+ // execute each event handler
+ for (var i in handlers) {
+ if (!handlers.hasOwnProperty(i)) continue;
+ this.$$handleEvent = handlers[i];
+ if (this.$$handleEvent(event) === false) {
+ returnValue = false;
+ }
+ }
+ return returnValue;
+};
+
+function fixEvent(event) {
+ // add W3C standard event methods
+ event.preventDefault = fixEvent.preventDefault;
+ event.stopPropagation = fixEvent.stopPropagation;
+ // fix target
+ event.target = event.srcElement;
+ return event;
+};
+fixEvent.preventDefault = function() {
+ this.returnValue = false;
+};
+fixEvent.stopPropagation = function() {
+ this.cancelBubble = true;
+};
+
+
+/**
+ * Pseudo event handler to be fired after the DOM was parsed or
+ * on window load at last.
+ *
+ * @author based upon some code by Dean Edwards
+ * @author Dean Edwards
+ * @link http://dean.edwards.name/weblog/2006/06/again/
+ */
+window.fireoninit = function() {
+ // quit if this function has already been called
+ if (arguments.callee.done) return;
+ // flag this function so we don't do the same thing twice
+ arguments.callee.done = true;
+ // kill the timer
+ if (_timer) {
+ clearInterval(_timer);
+ _timer = null;
+ }
+
+ if (typeof window.oninit == 'function') {
+ window.oninit();
+ }
+};
+
+/**
+ * Run the fireoninit function as soon as possible after
+ * the DOM was loaded, using different methods for different
+ * Browsers
+ *
+ * @author Dean Edwards
+ * @link http://dean.edwards.name/weblog/2006/06/again/
+ */
+ // for Mozilla
+ if (document.addEventListener) {
+ document.addEventListener("DOMContentLoaded", window.fireoninit, null);
+ }
+
+ // for Internet Explorer (using conditional comments)
+ /*@cc_on @*/
+ /*@if (@_win32)
+ document.write("<scr" + "ipt id=\"__ie_init\" defer=\"true\" src=\"//:\"><\/script>");
+ var script = document.getElementById("__ie_init");
+ script.onreadystatechange = function() {
+ if (this.readyState == "complete") {
+ window.fireoninit(); // call the onload handler
+ }
+ };
+ /*@end @*/
+
+ // for Safari
+ if (/WebKit/i.test(navigator.userAgent)) { // sniff
+ var _timer = setInterval(function() {
+ if (/loaded|complete/.test(document.readyState)) {
+ window.fireoninit(); // call the onload handler
+ }
+ }, 10);
+ }
+
+ // for other browsers
+ window.onload = window.fireoninit;
+
+
+/**
+ * This is a pseudo Event that will be fired by the fireoninit
+ * function above.
+ *
+ * Use addInitEvent to bind to this event!
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @see fireoninit()
+ */
+window.oninit = function(){};
+
+/**
+ * Bind a function to the window.init pseudo event
+ *
+ * @author Simon Willison
+ * @see http://simon.incutio.com/archive/2004/05/26/addLoadEvent
+ */
+function addInitEvent(func) {
+ var oldoninit = window.oninit;
+ if (typeof window.oninit != 'function') {
+ window.oninit = func;
+ } else {
+ window.oninit = function() {
+ oldoninit();
+ func();
+ };
+ }
+}
+
+/**
+ * Bind variables to a function call creating a closure
+ *
+ * Use this to circumvent variable scope problems when creating closures
+ * inside a loop
+ *
+ * @author Adrian Lang <lang@cosmocode.de>
+ * @link http://www.cosmocode.de/en/blog/gohr/2009-10/15-javascript-fixing-the-closure-scope-in-loops
+ * @param functionref fnc - the function to be called
+ * @param mixed - any arguments to be passed to the function
+ * @returns functionref
+ */
+function bind (fnc) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ return function() {
+ return fnc.apply(this, args);
+ }
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/helpers.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/helpers.js
new file mode 100644
index 000000000..8d4f3ea78
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/helpers.js
@@ -0,0 +1,146 @@
+/**
+ * Differrent helper functions
+ *
+ * @author Ilya Lebedev <ilya@lebedev.net>
+ * @license LGPL
+ */
+//-----------------------------------------------------------------------------
+// Variable/property checks
+//-----------------------------------------------------------------------------
+/**
+ * Checks if property is undefined
+ *
+ * @param {Object} prop value to check
+ * @return {Boolean} true if matched
+ * @scope public
+ */
+function isUndefined (prop /* :Object */) /* :Boolean */ {
+ return (typeof prop == 'undefined');
+}
+/**
+ * Checks if property is function
+ *
+ * @param {Object} prop value to check
+ * @return {Boolean} true if matched
+ * @scope public
+ */
+function isFunction (prop /* :Object */) /* :Boolean */ {
+ return (typeof prop == 'function');
+}
+/**
+ * Checks if property is string
+ *
+ * @param {Object} prop value to check
+ * @return {Boolean} true if matched
+ * @scope public
+ */
+function isString (prop /* :Object */) /* :Boolean */ {
+ return (typeof prop == 'string');
+}
+/**
+ * Checks if property is number
+ *
+ * @param {Object} prop value to check
+ * @return {Boolean} true if matched
+ * @scope public
+ */
+function isNumber (prop /* :Object */) /* :Boolean */ {
+ return (typeof prop == 'number');
+}
+/**
+ * Checks if property is the calculable number
+ *
+ * @param {Object} prop value to check
+ * @return {Boolean} true if matched
+ * @scope public
+ */
+function isNumeric (prop /* :Object */) /* :Boolean */ {
+ return isNumber(prop)&&!isNaN(prop)&&isFinite(prop);
+}
+/**
+ * Checks if property is array
+ *
+ * @param {Object} prop value to check
+ * @return {Boolean} true if matched
+ * @scope public
+ */
+function isArray (prop /* :Object */) /* :Boolean */ {
+ return (prop instanceof Array);
+}
+/**
+ * Checks if property is regexp
+ *
+ * @param {Object} prop value to check
+ * @return {Boolean} true if matched
+ * @scope public
+ */
+function isRegExp (prop /* :Object */) /* :Boolean */ {
+ return (prop instanceof RegExp);
+}
+/**
+ * Checks if property is a boolean value
+ *
+ * @param {Object} prop value to check
+ * @return {Boolean} true if matched
+ * @scope public
+ */
+function isBoolean (prop /* :Object */) /* :Boolean */ {
+ return ('boolean' == typeof prop);
+}
+/**
+ * Checks if property is a scalar value (value that could be used as the hash key)
+ *
+ * @param {Object} prop value to check
+ * @return {Boolean} true if matched
+ * @scope public
+ */
+function isScalar (prop /* :Object */) /* :Boolean */ {
+ return isNumeric(prop)||isString(prop);
+}
+/**
+ * Checks if property is empty
+ *
+ * @param {Object} prop value to check
+ * @return {Boolean} true if matched
+ * @scope public
+ */
+function isEmpty (prop /* :Object */) /* :Boolean */ {
+ if (isBoolean(prop)) return false;
+ if (isRegExp(prop) && new RegExp("").toString() == prop.toString()) return true;
+ if (isString(prop) || isNumber(prop)) return !prop;
+ if (Boolean(prop)&&false != prop) {
+ for (var i in prop) if(prop.hasOwnProperty(i)) return false
+ }
+ return true;
+}
+
+/**
+ * Checks if property is derived from prototype, applies method if it is not exists
+ *
+ * @param string property name
+ * @return bool true if prototyped
+ * @access public
+ */
+if ('undefined' == typeof Object.hasOwnProperty) {
+ Object.prototype.hasOwnProperty = function (prop) {
+ return !('undefined' == typeof this[prop] || this.constructor && this.constructor.prototype[prop] && this[prop] === this.constructor.prototype[prop]);
+ }
+}
+
+/**
+ * Very simplistic Flash plugin check, probably works for Flash 8 and higher only
+ */
+function hasFlash(version){
+ var ver = 0;
+ try{
+ if(navigator.plugins != null && navigator.plugins.length > 0){
+ ver = navigator.plugins["Shockwave Flash"].description.split(' ')[2].split('.')[0];
+ }else{
+ var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
+ ver = axo.GetVariable("$version").split(' ')[1].split(',')[0];
+ }
+ }catch(e){ }
+
+ if(ver >= version) return true;
+ return false;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.html
new file mode 100644
index 000000000..d614603ac
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="refresh" content="0; URL=../../" />
+<meta name="robots" content="noindex" />
+<title>nothing here...</title>
+</head>
+<body>
+<!-- this is just here to prevent directory browsing -->
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.js
new file mode 100644
index 000000000..16b00c0ab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.js
@@ -0,0 +1,116 @@
+/**
+ * Javascript for index view
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+var index = {
+
+ /**
+ * Delay in ms before showing the throbber.
+ * Used to skip the throbber for fast AJAX calls.
+ */
+ throbber_delay: 500,
+
+ /**
+ * Attach event handlers to all "folders" below the given element
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ treeattach: function(obj){
+ if(!obj) return;
+
+ var items = getElementsByClass('idx_dir',obj,'a');
+ for(var i=0; i<items.length; i++){
+ var elem = items[i];
+
+ // attach action to make the link clickable by AJAX
+ addEvent(elem,'click',function(e){ return index.toggle(e,this); });
+
+ // get the listitem the elem belongs to
+ var listitem = elem.parentNode;
+ while (listitem.tagName != 'LI') {
+ listitem = listitem.parentNode;
+ }
+ //when there are uls under this listitem mark this listitem as opened
+ if (listitem.getElementsByTagName('ul').length) {
+ listitem.open = true;
+ }
+ }
+ },
+
+ /**
+ * Open or close a subtree using AJAX
+ * The contents of subtrees are "cached" untill the page is reloaded.
+ * A "loading" indicator is shown only when the AJAX call is slow.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+ toggle: function(e,clicky){
+ var listitem = clicky.parentNode.parentNode;
+
+ listitem.open = !listitem.open;
+ // listitem.open represents now the action to be done
+
+ // if already open, close by removing the sublist
+ var sublists = listitem.getElementsByTagName('ul');
+ if(!listitem.open){
+ if (sublists.length) {
+ sublists[0].style.display='none';
+ }
+ listitem.className='closed';
+ e.preventDefault();
+ return false;
+ }
+
+ // just show if already loaded
+ if(sublists.length && listitem.open){
+ sublists[0].style.display='';
+ listitem.className='open';
+ e.preventDefault();
+ return false;
+ }
+
+ // prepare an AJAX call to fetch the subtree
+ var ajax = new sack(DOKU_BASE + 'lib/exe/ajax.php');
+ ajax.AjaxFailedAlert = '';
+ ajax.encodeURIString = false;
+ if(ajax.failed) return true;
+
+ //prepare the new ul
+ var ul = document.createElement('ul');
+ ul.className = 'idx';
+ timeout = window.setTimeout(function(){
+ // show the throbber as needed
+ if (listitem.open) {
+ ul.innerHTML = '<li><img src="'+DOKU_BASE+'lib/images/throbber.gif" alt="loading..." title="loading..." /></li>';
+ listitem.appendChild(ul);
+ listitem.className='open';
+ }
+ }, this.throbber_delay);
+ ajax.elementObj = ul;
+ ajax.afterCompletion = function(){
+ window.clearTimeout(timeout);
+ index.treeattach(ul);
+ if (listitem.className!='open') {
+ if (!listitem.open) {
+ ul.style.display='none';
+ }
+ listitem.appendChild(ul);
+ if (listitem.open) {
+ listitem.className='open';
+ }
+ }
+ };
+ ajax.runAJAX(clicky.search.substr(1)+'&call=index');
+ e.preventDefault();
+ return false;
+ }
+};
+
+
+addInitEvent(function(){
+ if (DOKUid('index__tree'))
+ index.treeattach(DOKUid('index__tree'));
+});
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/linkwiz.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/linkwiz.js
new file mode 100644
index 000000000..55469c158
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/linkwiz.js
@@ -0,0 +1,282 @@
+/**
+ * The Link Wizard
+ *
+ * @author Andreas Gohr <gohr@cosmocode.de>
+ */
+var linkwiz = {
+ wiz: null,
+ entry: null,
+ result: null,
+ timer: null,
+ sack: null,
+ textArea: null,
+ selected: -1,
+ selection: null,
+
+ /**
+ * Initialize the linkwizard by creating the needed HTML
+ * and attaching the eventhandlers
+ */
+ init: function(textArea){
+ // prepare AJAX object
+ linkwiz.sack = new sack(DOKU_BASE + 'lib/exe/ajax.php');
+ linkwiz.sack.AjaxFailedAlert = '';
+ linkwiz.sack.encodeURIString = false;
+
+ // create HTML Structure
+ linkwiz.wiz = document.createElement('div');
+ linkwiz.wiz.id = 'link__wiz';
+ linkwiz.wiz.className = 'picker';
+ linkwiz.wiz.style.top = (findPosY(textArea)+20)+'px';
+ linkwiz.wiz.style.left = (findPosX(textArea)+80)+'px';
+ linkwiz.wiz.style.marginLeft = '-10000px';
+
+ linkwiz.wiz.innerHTML =
+ '<div id="link__wiz_header">'+
+ '<img src="'+DOKU_BASE+'lib/images/close.png" width="16" height="16" align="right" alt="" id="link__wiz_close" />'+
+ LANG['linkwiz']+'</div>'+
+ '<div>'+LANG['linkto']+' <input type="text" class="edit" id="link__wiz_entry" autocomplete="off" /></div>'+
+ '<div id="link__wiz_result"></div>';
+ textArea.form.parentNode.appendChild(linkwiz.wiz);
+ linkwiz.textArea = textArea;
+ linkwiz.result = DOKUid('link__wiz_result');
+ linkwiz.entry = DOKUid('link__wiz_entry');
+
+ // attach event handlers
+ var obj;
+ obj = DOKUid('link__wiz_close');
+ obj.onclick = linkwiz.hide;
+
+ linkwiz.sack.elementObj = linkwiz.result;
+ addEvent(linkwiz.entry,'keyup',linkwiz.onEntry);
+ addEvent(linkwiz.result,'click',linkwiz.onResultClick);
+ drag.attach(linkwiz.wiz,DOKUid('link__wiz_header'));
+ },
+
+ /**
+ * handle all keyup events in the entry field
+ */
+ onEntry: function(e){
+ if(e.keyCode == 37 || e.keyCode == 39){ //left/right
+ return true; //ignore
+ }
+ if(e.keyCode == 27){
+ linkwiz.hide();
+ e.preventDefault();
+ e.stopPropagation();
+ return false;
+ }
+ if(e.keyCode == 38){ //Up
+ linkwiz.select(linkwiz.selected -1);
+ e.preventDefault();
+ e.stopPropagation();
+ return false;
+ }
+ if(e.keyCode == 40){ //Down
+ linkwiz.select(linkwiz.selected +1);
+ e.preventDefault();
+ e.stopPropagation();
+ return false;
+ }
+ if(e.keyCode == 13){ //Enter
+ if(linkwiz.selected > -1){
+ var obj = linkwiz.getResult(linkwiz.selected);
+ if(obj){
+ var a = obj.getElementsByTagName('A')[0];
+ linkwiz.resultClick(a);
+ }
+ }else if(linkwiz.entry.value){
+ linkwiz.insertLink(linkwiz.entry.value);
+ }
+
+ e.preventDefault();
+ e.stopPropagation();
+ return false;
+ }
+ linkwiz.autocomplete();
+ },
+
+ /**
+ * Get one of the result by index
+ *
+ * @param int result div to return
+ * @returns DOMObject or null
+ */
+ getResult: function(num){
+ var obj;
+ var childs = linkwiz.result.getElementsByTagName('DIV');
+ obj = childs[num];
+ if(obj){
+ return obj;
+ }else{
+ return null;
+ }
+ },
+
+ /**
+ * Select the given result
+ */
+ select: function(num){
+ if(num < 0){
+ linkwiz.deselect();
+ return;
+ }
+
+ var obj = linkwiz.getResult(num);
+ if(obj){
+ linkwiz.deselect();
+ obj.className += ' selected';
+
+ // make sure the item is viewable in the scroll view
+ // FIXME check IE compatibility
+ if(obj.offsetTop > linkwiz.result.scrollTop + linkwiz.result.clientHeight){
+ linkwiz.result.scrollTop += obj.clientHeight;
+ }else if(obj.offsetTop - linkwiz.result.clientHeight < linkwiz.result.scrollTop){ // this works but isn't quite right, fixes welcome
+ linkwiz.result.scrollTop -= obj.clientHeight;
+ }
+ // now recheck - if still not in view, the user used the mouse to scroll
+ if( (obj.offsetTop > linkwiz.result.scrollTop + linkwiz.result.clientHeight) ||
+ (obj.offsetTop < linkwiz.result.scrollTop) ){
+ obj.scrollIntoView();
+ }
+
+ linkwiz.selected = num;
+ }
+ },
+
+ /**
+ * deselect a result if any is selected
+ */
+ deselect: function(){
+ if(linkwiz.selected > -1){
+ var obj = linkwiz.getResult(linkwiz.selected);
+ if(obj){
+ obj.className = obj.className.replace(/ ?selected/,'');
+ }
+ }
+ linkwiz.selected = -1;
+ },
+
+ /**
+ * Handle clicks in the result set an dispatch them to
+ * resultClick()
+ */
+ onResultClick: function(e){
+ if(e.target.tagName != 'A') return;
+ e.stopPropagation();
+ e.preventDefault();
+ linkwiz.resultClick(e.target);
+ return false;
+ },
+
+ /**
+ * Handles the "click" on a given result anchor
+ */
+ resultClick: function(a){
+ var id = a.title;
+ if(id == '' || id.substr(id.length-1) == ':'){
+ linkwiz.entry.value = id;
+ linkwiz.autocomplete_exec();
+ }else{
+ linkwiz.entry.value = id;
+ if(a.nextSibling && a.nextSibling.tagName == 'SPAN'){
+ linkwiz.insertLink(a.nextSibling.innerHTML);
+ }else{
+ linkwiz.insertLink('');
+ }
+ }
+ },
+
+ /**
+ * Insert the id currently in the entry box to the textarea,
+ * replacing the current selection or at the curso postion.
+ * When no selection is available the given title will be used
+ * as link title instead
+ */
+ insertLink: function(title){
+ if(!linkwiz.entry.value) return;
+
+ var sel = getSelection(linkwiz.textArea);
+ if(sel.start == 0 && sel.end == 0) sel = linkwiz.selection;
+
+ var stxt = sel.getText();
+ if(!stxt && !DOKU_UHC) stxt=title;
+
+ // prepend colon inside namespaces for non namespace pages
+ if(linkwiz.textArea.form['id'].value.indexOf(':') != -1 &&
+ linkwiz.entry.value.indexOf(':') == -1){
+ linkwiz.entry.value = ':'+linkwiz.entry.value;
+ }
+
+ var link = '[['+linkwiz.entry.value+'|';
+ if(stxt) link += stxt;
+ link += ']]';
+
+ var so = linkwiz.entry.value.length+3;
+ var eo = 2;
+
+ pasteText(sel,link,{startofs: so, endofs: eo});
+ linkwiz.hide();
+ },
+
+ /**
+ * Start the page/namespace lookup timer
+ *
+ * Calls autocomplete_exec when the timer runs out
+ */
+ autocomplete: function(){
+ if(linkwiz.timer !== null){
+ window.clearTimeout(linkwiz.timer);
+ linkwiz.timer = null;
+ }
+
+ linkwiz.timer = window.setTimeout(linkwiz.autocomplete_exec,350);
+ },
+
+ /**
+ * Executes the AJAX call for the page/namespace lookup
+ */
+ autocomplete_exec: function(){
+ linkwiz.deselect();
+ linkwiz.result.innerHTML = '<img src="'+DOKU_BASE+'lib/images/throbber.gif" alt="" width="16" height="16" />';
+ linkwiz.sack.runAJAX('call=linkwiz&q='+encodeURI(linkwiz.entry.value));
+ },
+
+ /**
+ * Clears the result area
+ */
+ clear: function(){
+ linkwiz.result.innerHTML = 'Search for a matching page name above, or browse through the pages on the right';
+ linkwiz.entry.value = '';
+ },
+
+ /**
+ * Show the linkwizard
+ */
+ show: function(){
+ linkwiz.selection = getSelection(linkwiz.textArea);
+ linkwiz.wiz.style.marginLeft = '0px';
+ linkwiz.entry.focus();
+ linkwiz.autocomplete();
+ },
+
+ /**
+ * Hide the link wizard
+ */
+ hide: function(){
+ linkwiz.wiz.style.marginLeft = '-10000px';
+ linkwiz.textArea.focus();
+ },
+
+ /**
+ * Toggle the link wizard
+ */
+ toggle: function(){
+ if(linkwiz.wiz.style.marginLeft == '-10000px'){
+ linkwiz.show();
+ }else{
+ linkwiz.hide();
+ }
+ }
+};
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/media.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/media.js
new file mode 100644
index 000000000..598fb61f4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/media.js
@@ -0,0 +1,351 @@
+/**
+ * JavaScript functionalitiy for the media management popup
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+var media_manager = {
+ keepopen: false,
+ hide: false,
+
+ /**
+ * Attach event handlers to all "folders" below the given element
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ treeattach: function(obj){
+ if(!obj) return;
+ var items = obj.getElementsByTagName('li');
+ for(var i=0; i<items.length; i++){
+ var elem = items[i];
+
+ // attach action to make the +/- clickable
+ var clicky = elem.getElementsByTagName('img')[0];
+ clicky.style.cursor = 'pointer';
+ addEvent(clicky,'click',function(event){ return media_manager.toggle(event,this); });
+
+ // attach action load folder list via AJAX
+ var link = elem.getElementsByTagName('a')[0];
+ link.style.cursor = 'pointer';
+ addEvent(link,'click',function(event){ return media_manager.list(event,this); });
+ }
+ },
+
+ /**
+ * Attach the image selector action to all links below the given element
+ * also add the action to autofill the "upload as" field
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ selectorattach: function(obj){
+ if(!obj) return;
+
+ var items = getElementsByClass('select',obj,'a');
+ for(var i=0; i<items.length; i++){
+ var elem = items[i];
+ elem.style.cursor = 'pointer';
+ addEvent(elem,'click',function(event){ return media_manager.select(event,this); });
+ }
+
+ // hide syntax example
+ items = getElementsByClass('example',obj,'div');
+ for(var i=0; i<items.length; i++){
+ elem = items[i];
+ elem.style.display = 'none';
+ }
+
+ var file = DOKUid('upload__file');
+ if(!file) return;
+ addEvent(file,'change',media_manager.suggest);
+ },
+
+ /**
+ * Attach deletion confirmation dialog to the delete buttons.
+ *
+ * Michael Klier <chi@chimeric.de>
+ */
+ confirmattach: function(obj){
+ if(!obj) return;
+
+ items = getElementsByClass('btn_media_delete',obj,'a');
+ for(var i=0; i<items.length; i++){
+ var elem = items[i];
+ addEvent(elem,'click',function(e){
+ if(e.target.tagName == 'IMG'){
+ var name = e.target.parentNode.title;
+ }else{
+ var name = e.target.title;
+ }
+ if(!confirm(LANG['del_confirm'] + "\n" + name)) {
+ e.preventDefault();
+ return false;
+ } else {
+ return true;
+ }
+ });
+ }
+ },
+
+ /**
+ * Creates checkboxes for additional options
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ attachoptions: function(obj){
+ if(!obj) return;
+
+ // keep open
+ if(opener){
+ var kobox = document.createElement('input');
+ kobox.type = 'checkbox';
+ kobox.id = 'media__keepopen';
+ if(DokuCookie.getValue('keepopen')){
+ kobox.checked = true;
+ kobox.defaultChecked = true; //IE wants this
+ media_manager.keepopen = true;
+ }
+ addEvent(kobox,'click',function(event){ return media_manager.togglekeepopen(event,this); });
+
+ var kolbl = document.createElement('label');
+ kolbl.htmlFor = 'media__keepopen';
+ kolbl.innerHTML = LANG['keepopen'];
+
+ var kobr = document.createElement('br');
+
+ obj.appendChild(kobox);
+ obj.appendChild(kolbl);
+ obj.appendChild(kobr);
+ }
+
+ // hide details
+ var hdbox = document.createElement('input');
+ hdbox.type = 'checkbox';
+ hdbox.id = 'media__hide';
+ if(DokuCookie.getValue('hide')){
+ hdbox.checked = true;
+ hdbox.defaultChecked = true; //IE wants this
+ media_manager.hide = true;
+ }
+ addEvent(hdbox,'click',function(event){ return media_manager.togglehide(event,this); });
+
+ var hdlbl = document.createElement('label');
+ hdlbl.htmlFor = 'media__hide';
+ hdlbl.innerHTML = LANG['hidedetails'];
+
+ var hdbr = document.createElement('br');
+
+ obj.appendChild(hdbox);
+ obj.appendChild(hdlbl);
+ obj.appendChild(hdbr);
+ media_manager.updatehide();
+ },
+
+ /**
+ * Opens the searchfield
+ *
+ * @author Tobias Sarnowski <sarnowski@cosmocode.de>
+ */
+ showsearchfield: function(event,link){
+ // prepare an AJAX call to fetch the search
+ var ajax = new sack(DOKU_BASE + 'lib/exe/ajax.php');
+ ajax.AjaxFailedAlert = '';
+ ajax.encodeURIString = false;
+ if(ajax.failed) return true;
+
+ cleanMsgArea();
+
+ var content = DOKUid('media__content');
+ content.innerHTML = '<img src="'+DOKU_MEDIA+'lib/images/loading.gif" alt="..." class="load" />';
+
+ ajax.elementObj = content;
+ ajax.afterCompletion = function(){
+ media_manager.selectorattach(content);
+ media_manager.confirmattach(content);
+ media_manager.updatehide();
+ };
+ ajax.runAJAX(link.search.substr(1)+'&call=mediasearchlist');
+ return false;
+ },
+
+ /**
+ * Toggles the keep open state
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ togglekeepopen: function(event,cb){
+ if(cb.checked){
+ DokuCookie.setValue('keepopen',1);
+ media_manager.keepopen = true;
+ }else{
+ DokuCookie.setValue('keepopen','');
+ media_manager.keepopen = false;
+ }
+ },
+
+ /**
+ * Toggles the hide details state
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ togglehide: function(event,cb){
+ if(cb.checked){
+ DokuCookie.setValue('hide',1);
+ media_manager.hide = true;
+ }else{
+ DokuCookie.setValue('hide','');
+ media_manager.hide = false;
+ }
+ media_manager.updatehide();
+ },
+
+ /**
+ * Sets the visibility of the image details accordingly to the
+ * chosen hide state
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ updatehide: function(){
+ var obj = DOKUid('media__content');
+ if(!obj) return;
+ var details = getElementsByClass('detail',obj,'div');
+ for(var i=0; i<details.length; i++){
+ if(media_manager.hide){
+ details[i].style.display = 'none';
+ }else{
+ details[i].style.display = '';
+ }
+ }
+ },
+
+ /**
+ * Insert the clicked image into the opener's textarea
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ select: function(event,link){
+ var id = link.name.substr(2);
+
+ if(!opener){
+ // if we don't run in popup display example
+ var ex = DOKUid('ex_'+id.replace(/:/g,'_'));
+ if(ex.style.display == ''){
+ ex.style.display = 'none';
+ }else{
+ ex.style.display = '';
+ }
+ return false;
+ }
+ opener.insertTags('wiki__text','{{'+id+'|','}}','');
+
+ if(!media_manager.keepopen) window.close();
+ opener.focus();
+ return false;
+ },
+
+ /**
+ * list the content of a namespace using AJAX
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ list: function(event,link){
+ // prepare an AJAX call to fetch the subtree
+ var ajax = new sack(DOKU_BASE + 'lib/exe/ajax.php');
+ ajax.AjaxFailedAlert = '';
+ ajax.encodeURIString = false;
+ if(ajax.failed) return true;
+
+ cleanMsgArea();
+
+ var content = DOKUid('media__content');
+ content.innerHTML = '<img src="'+DOKU_MEDIA+'lib/images/loading.gif" alt="..." class="load" />';
+
+ ajax.elementObj = content;
+ ajax.afterCompletion = function(){
+ media_manager.selectorattach(content);
+ media_manager.confirmattach(content);
+ media_manager.updatehide();
+ media_manager.initFlashUpload();
+ };
+ ajax.runAJAX(link.search.substr(1)+'&call=medialist');
+ return false;
+ },
+
+
+ /**
+ * Open or close a subtree using AJAX
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ toggle: function(event,clicky){
+ var listitem = clicky.parentNode;
+
+ // if already open, close by removing the sublist
+ var sublists = listitem.getElementsByTagName('ul');
+ if(sublists.length){
+ listitem.removeChild(sublists[0]);
+ clicky.src = DOKU_MEDIA+'lib/images/plus.gif';
+ return false;
+ }
+
+ // get the enclosed link (is always the first one)
+ var link = listitem.getElementsByTagName('a')[0];
+
+ // prepare an AJAX call to fetch the subtree
+ var ajax = new sack(DOKU_BASE + 'lib/exe/ajax.php');
+ ajax.AjaxFailedAlert = '';
+ ajax.encodeURIString = false;
+ if(ajax.failed) return true;
+
+ //prepare the new ul
+ var ul = document.createElement('ul');
+ //fixme add classname here
+ listitem.appendChild(ul);
+ ajax.elementObj = ul;
+ ajax.afterCompletion = function(){ media_manager.treeattach(ul); };
+ ajax.runAJAX(link.search.substr(1)+'&call=medians');
+ clicky.src = DOKU_MEDIA+'lib/images/minus.gif';
+ return false;
+ },
+
+ /**
+ * Prefills the wikiname.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ suggest: function(){
+ var file = DOKUid('upload__file');
+ var name = DOKUid('upload__name');
+ if(!file || !name) return;
+
+ var text = file.value;
+ text = text.substr(text.lastIndexOf('/')+1);
+ text = text.substr(text.lastIndexOf('\\')+1);
+ name.value = text;
+ },
+
+
+ initFlashUpload: function(){
+ if(!hasFlash(8)) return;
+ var oform = DOKUid('dw__upload');
+ var oflash = DOKUid('dw__flashupload');
+ if(!oform || !oflash) return;
+
+ var clicky = document.createElement('img');
+ clicky.src = DOKU_MEDIA+'lib/images/multiupload.png';
+ clicky.title = LANG['mu_btn'];
+ clicky.alt = LANG['mu_btn'];
+ clicky.style.cursor = 'pointer';
+ clicky.onclick = function(){
+ oform.style.display = 'none';
+ oflash.style.display = '';
+ };
+ oform.appendChild(clicky);
+ }
+};
+
+addInitEvent(function(){
+ media_manager.treeattach(DOKUid('media__tree'));
+ media_manager.selectorattach(DOKUid('media__content'));
+ media_manager.confirmattach(DOKUid('media__content'));
+ media_manager.attachoptions(DOKUid('media__opts'));
+ media_manager.initFlashUpload();
+});
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/pngbehavior.htc b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/pngbehavior.htc
new file mode 100644
index 000000000..d1db8e765
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/pngbehavior.htc
@@ -0,0 +1,53 @@
+// this is an ugly fix to make Internet Explorer work with transparent
+// PNG images - do your self a favour and use a real browser!
+
+<public:component>
+<public:attach event="onpropertychange" onevent="propertyChanged()" />
+<script>
+
+var supported = /MSIE (5\.5)|[6789]/.test(navigator.userAgent) && navigator.platform == "Win32";
+var realSrc;
+var blankSrc = DOKU_BASE+"lib/images/blank.gif";
+
+if (supported) fixImage();
+
+function propertyChanged() {
+ if (!supported) return;
+
+ var pName = event.propertyName;
+ if (pName != "src") return;
+ // if not set to blank
+ if ( ! new RegExp(blankSrc).test(src))
+ fixImage();
+};
+
+function fixImage() {
+ // get src
+ var src = element.src;
+
+ // check for real change
+ if (src == realSrc) {
+ element.src = blankSrc;
+ return;
+ }
+
+ if ( ! new RegExp(blankSrc).test(src)) {
+ // backup old src
+ realSrc = src;
+ }
+
+ // test for png
+ if ( /\.png$/.test( realSrc.toLowerCase() ) ) {
+ // set blank image
+ element.src = blankSrc;
+ // set filter
+ element.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "',sizingMethod='scale')";
+ }
+ else {
+ // remove filter
+ element.runtimeStyle.filter = "";
+ }
+}
+
+</script>
+</public:component>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/script.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/script.js
new file mode 100644
index 000000000..491794f13
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/script.js
@@ -0,0 +1,561 @@
+/**
+ * Some of these scripts were taken from wikipedia.org and were modified for DokuWiki
+ */
+
+/**
+ * Some browser detection
+ */
+var clientPC = navigator.userAgent.toLowerCase(); // Get client info
+var is_macos = navigator.appVersion.indexOf('Mac') != -1;
+var is_gecko = ((clientPC.indexOf('gecko')!=-1) && (clientPC.indexOf('spoofer')==-1) &&
+ (clientPC.indexOf('khtml') == -1) && (clientPC.indexOf('netscape/7.0')==-1));
+var is_safari = ((clientPC.indexOf('AppleWebKit')!=-1) && (clientPC.indexOf('spoofer')==-1));
+var is_khtml = (navigator.vendor == 'KDE' || ( document.childNodes && !document.all && !navigator.taintEnabled ));
+if (clientPC.indexOf('opera')!=-1) {
+ var is_opera = true;
+ var is_opera_preseven = (window.opera && !document.childNodes);
+ var is_opera_seven = (window.opera && document.childNodes);
+}
+
+/**
+ * Handy shortcut to document.getElementById
+ *
+ * This function was taken from the prototype library
+ *
+ * @link http://prototype.conio.net/
+ */
+function DOKUid() {
+ var elements = new Array();
+
+ for (var i = 0; i < arguments.length; i++) {
+ var element = arguments[i];
+ if (typeof element == 'string')
+ element = document.getElementById(element);
+
+ if (arguments.length == 1)
+ return element;
+
+ elements.push(element);
+ }
+
+ return elements;
+}
+
+/**
+ * Simple function to check if a global var is defined
+ *
+ * @author Kae Verens
+ * @link http://verens.com/archives/2005/07/25/isset-for-javascript/#comment-2835
+ */
+function isset(varname){
+ return(typeof(window[varname])!='undefined');
+}
+
+/**
+ * Select elements by their class name
+ *
+ * @author Dustin Diaz <dustin [at] dustindiaz [dot] com>
+ * @link http://www.dustindiaz.com/getelementsbyclass/
+ */
+function getElementsByClass(searchClass,node,tag) {
+ var classElements = new Array();
+ if ( node == null )
+ node = document;
+ if ( tag == null )
+ tag = '*';
+ var els = node.getElementsByTagName(tag);
+ var elsLen = els.length;
+ var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
+ for (var i = 0, j = 0; i < elsLen; i++) {
+ if ( pattern.test(els[i].className) ) {
+ classElements[j] = els[i];
+ j++;
+ }
+ }
+ return classElements;
+}
+
+/**
+ * Get the X offset of the top left corner of the given object
+ *
+ * @link http://www.quirksmode.org/index.html?/js/findpos.html
+ */
+function findPosX(object){
+ var curleft = 0;
+ var obj = DOKUid(object);
+ if (obj.offsetParent){
+ while (obj.offsetParent){
+ curleft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ }
+ else if (obj.x){
+ curleft += obj.x;
+ }
+ return curleft;
+} //end findPosX function
+
+/**
+ * Get the Y offset of the top left corner of the given object
+ *
+ * @link http://www.quirksmode.org/index.html?/js/findpos.html
+ */
+function findPosY(object){
+ var curtop = 0;
+ var obj = DOKUid(object);
+ if (obj.offsetParent){
+ while (obj.offsetParent){
+ curtop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ }
+ else if (obj.y){
+ curtop += obj.y;
+ }
+ return curtop;
+} //end findPosY function
+
+/**
+ * Escape special chars in JavaScript
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function jsEscape(text){
+ var re=new RegExp("\\\\","g");
+ text=text.replace(re,"\\\\");
+ re=new RegExp("'","g");
+ text=text.replace(re,"\\'");
+ re=new RegExp('"',"g");
+ text=text.replace(re,'&quot;');
+ re=new RegExp("\\\\\\\\n","g");
+ text=text.replace(re,"\\n");
+ return text;
+}
+
+/**
+ * This function escapes some special chars
+ * @deprecated by above function
+ */
+function escapeQuotes(text) {
+ var re=new RegExp("'","g");
+ text=text.replace(re,"\\'");
+ re=new RegExp('"',"g");
+ text=text.replace(re,'&quot;');
+ re=new RegExp("\\n","g");
+ text=text.replace(re,"\\n");
+ return text;
+}
+
+/**
+ * Adds a node as the first childenode to the given parent
+ *
+ * @see appendChild()
+ */
+function prependChild(parent,element) {
+ if(!parent.firstChild){
+ parent.appendChild(element);
+ }else{
+ parent.insertBefore(element,parent.firstChild);
+ }
+}
+
+/**
+ * Prints a animated gif to show the search is performed
+ *
+ * Because we need to modify the DOM here before the document is loaded
+ * and parsed completely we have to rely on document.write()
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function showLoadBar(){
+
+ document.write('<img src="'+DOKU_MEDIA+'lib/images/loading.gif" '+
+ 'width="150" height="12" alt="..." />');
+
+ /* this does not work reliable in IE
+ obj = DOKUid(id);
+
+ if(obj){
+ obj.innerHTML = '<img src="'+DOKU_BASE+'lib/images/loading.gif" '+
+ 'width="150" height="12" alt="..." />';
+ obj.style.display="block";
+ }
+ */
+}
+
+/**
+ * Disables the animated gif to show the search is done
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function hideLoadBar(id){
+ obj = DOKUid(id);
+ if(obj) obj.style.display="none";
+}
+
+/**
+ * Adds the toggle switch to the TOC
+ */
+function addTocToggle() {
+ if(!document.getElementById) return;
+ var header = DOKUid('toc__header');
+ if(!header) return;
+ var toc = DOKUid('toc__inside');
+
+ var obj = document.createElement('span');
+ obj.id = 'toc__toggle';
+ obj.style.cursor = 'pointer';
+ if (toc && toc.style.display == 'none') {
+ obj.innerHTML = '<span>+</span>';
+ obj.className = 'toc_open';
+ } else {
+ obj.innerHTML = '<span>&minus;</span>';
+ obj.className = 'toc_close';
+ }
+
+ prependChild(header,obj);
+ obj.parentNode.onclick = toggleToc;
+ try {
+ obj.parentNode.style.cursor = 'pointer';
+ obj.parentNode.style.cursor = 'hand';
+ }catch(e){}
+}
+
+/**
+ * This toggles the visibility of the Table of Contents
+ */
+function toggleToc() {
+ var toc = DOKUid('toc__inside');
+ var obj = DOKUid('toc__toggle');
+ if(toc.style.display == 'none') {
+ toc.style.display = '';
+ obj.innerHTML = '<span>&minus;</span>';
+ obj.className = 'toc_close';
+ } else {
+ toc.style.display = 'none';
+ obj.innerHTML = '<span>+</span>';
+ obj.className = 'toc_open';
+ }
+}
+
+/**
+ * Display an insitu footnote popup
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+function footnote(e){
+ var obj = e.target;
+ var id = obj.id.substr(5);
+
+ // get or create the footnote popup div
+ var fndiv = DOKUid('insitu__fn');
+ if(!fndiv){
+ fndiv = document.createElement('div');
+ fndiv.id = 'insitu__fn';
+ fndiv.className = 'insitu-footnote JSpopup dokuwiki';
+
+ // autoclose on mouseout - ignoring bubbled up events
+ addEvent(fndiv,'mouseout',function(e){
+ if(e.target != fndiv){
+ e.stopPropagation();
+ return;
+ }
+ // check if the element was really left
+ if(e.pageX){ // Mozilla
+ var bx1 = findPosX(fndiv);
+ var bx2 = bx1 + fndiv.offsetWidth;
+ var by1 = findPosY(fndiv);
+ var by2 = by1 + fndiv.offsetHeight;
+ var x = e.pageX;
+ var y = e.pageY;
+ if(x > bx1 && x < bx2 && y > by1 && y < by2){
+ // we're still inside boundaries
+ e.stopPropagation();
+ return;
+ }
+ }else{ // IE
+ if(e.offsetX > 0 && e.offsetX < fndiv.offsetWidth-1 &&
+ e.offsetY > 0 && e.offsetY < fndiv.offsetHeight-1){
+ // we're still inside boundaries
+ e.stopPropagation();
+ return;
+ }
+ }
+ // okay, hide it
+ fndiv.style.display='none';
+ });
+ document.body.appendChild(fndiv);
+ }
+
+ // locate the footnote anchor element
+ var a = DOKUid( "fn__"+id );
+ if (!a){ return; }
+
+ // anchor parent is the footnote container, get its innerHTML
+ var content = new String (a.parentNode.parentNode.innerHTML);
+
+ // strip the leading content anchors and their comma separators
+ content = content.replace(/<sup>.*<\/sup>/gi, '');
+ content = content.replace(/^\s+(,\s+)+/,'');
+
+ // prefix ids on any elements with "insitu__" to ensure they remain unique
+ content = content.replace(/\bid=\"(.*?)\"/gi,'id="insitu__$1');
+
+ // now put the content into the wrapper
+ fndiv.innerHTML = content;
+
+ // position the div and make it visible
+ var x; var y;
+ if(e.pageX){ // Mozilla
+ x = e.pageX;
+ y = e.pageY;
+ }else{ // IE
+ x = e.offsetX;
+ y = e.offsetY;
+ }
+ fndiv.style.position = 'absolute';
+ fndiv.style.left = (x+2)+'px';
+ fndiv.style.top = (y+2)+'px';
+ fndiv.style.display = '';
+}
+
+/**
+ * Add the event handlers to footnotes
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+addInitEvent(function(){
+ var elems = getElementsByClass('fn_top',null,'a');
+ for(var i=0; i<elems.length; i++){
+ addEvent(elems[i],'mouseover',function(e){footnote(e);});
+ }
+});
+
+/**
+ * Add the edit window size controls
+ */
+function initSizeCtl(ctlid,edid){
+ if(!document.getElementById){ return; }
+
+ var ctl = DOKUid(ctlid);
+ var textarea = DOKUid(edid);
+ if(!ctl || !textarea) return;
+
+ var hgt = DokuCookie.getValue('sizeCtl');
+ if(hgt){
+ textarea.style.height = hgt;
+ }else{
+ textarea.style.height = '300px';
+ }
+
+ var wrp = DokuCookie.getValue('wrapCtl');
+ if(wrp){
+ setWrap(textarea, wrp);
+ } // else use default value
+
+ var l = document.createElement('img');
+ var s = document.createElement('img');
+ var w = document.createElement('img');
+ l.src = DOKU_MEDIA+'lib/images/larger.gif';
+ s.src = DOKU_MEDIA+'lib/images/smaller.gif';
+ w.src = DOKU_MEDIA+'lib/images/wrap.gif';
+ addEvent(l,'click',function(){sizeCtl(edid,100);});
+ addEvent(s,'click',function(){sizeCtl(edid,-100);});
+ addEvent(w,'click',function(){toggleWrap(edid);});
+ ctl.appendChild(l);
+ ctl.appendChild(s);
+ ctl.appendChild(w);
+}
+
+/**
+ * This sets the vertical size of the editbox
+ */
+function sizeCtl(edid,val){
+ var textarea = DOKUid(edid);
+ var height = parseInt(textarea.style.height.substr(0,textarea.style.height.length-2));
+ height += val;
+ textarea.style.height = height+'px';
+
+ DokuCookie.setValue('sizeCtl',textarea.style.height);
+}
+
+/**
+ * Toggle the wrapping mode of a textarea
+ */
+function toggleWrap(edid){
+ var textarea = DOKUid(edid);
+ var wrap = textarea.getAttribute('wrap');
+ if(wrap && wrap.toLowerCase() == 'off'){
+ setWrap(textarea, 'soft');
+ }else{
+ setWrap(textarea, 'off');
+ }
+
+ DokuCookie.setValue('wrapCtl',textarea.getAttribute('wrap'));
+}
+
+/**
+ * Set the wrapping mode of a textarea
+ *
+ * @author Fluffy Convict <fluffyconvict@hotmail.com>
+ * @author <shutdown@flashmail.com>
+ * @link http://news.hping.org/comp.lang.javascript.archive/12265.html
+ * @link https://bugzilla.mozilla.org/show_bug.cgi?id=41464
+ */
+function setWrap(textarea, wrapAttrValue){
+ textarea.setAttribute('wrap', wrapAttrValue);
+
+ // Fix display for mozilla
+ var parNod = textarea.parentNode;
+ var nxtSib = textarea.nextSibling;
+ parNod.removeChild(textarea);
+ parNod.insertBefore(textarea, nxtSib);
+}
+
+/**
+ * Handler to close all open Popups
+ */
+function closePopups(){
+ if(!document.getElementById){ return; }
+
+ var divs = document.getElementsByTagName('div');
+ for(var i=0; i < divs.length; i++){
+ if(divs[i].className.indexOf('JSpopup') != -1){
+ divs[i].style.display = 'none';
+ }
+ }
+}
+
+/**
+ * Looks for an element with the ID scroll__here at scrolls to it
+ */
+function scrollToMarker(){
+ var obj = DOKUid('scroll__here');
+ if(obj) obj.scrollIntoView();
+}
+
+/**
+ * Looks for an element with the ID focus__this at sets focus to it
+ */
+function focusMarker(){
+ var obj = DOKUid('focus__this');
+ if(obj) obj.focus();
+}
+
+/**
+ * Remove messages
+ */
+function cleanMsgArea(){
+ var elems = getElementsByClass('(success|info|error)',document,'div');
+ if(elems){
+ for(var i=0; i<elems.length; i++){
+ elems[i].style.display = 'none';
+ }
+ }
+}
+
+/**
+ * disable multiple revisions checkboxes if two are checked
+ *
+ * @author Anika Henke <anika@selfthinker.org>
+ */
+addInitEvent(function(){
+ var revForm = DOKUid('page__revisions');
+ if (!revForm) return;
+ var elems = revForm.elements;
+ var countTicks = 0;
+ for (var i=0; i<elems.length; i++) {
+ var input1 = elems[i];
+ if (input1.type=='checkbox') {
+ addEvent(input1,'click',function(e){
+ if (this.checked) countTicks++;
+ else countTicks--;
+ for (var j=0; j<elems.length; j++) {
+ var input2 = elems[j];
+ if (countTicks >= 2) input2.disabled = (input2.type=='checkbox' && !input2.checked);
+ else input2.disabled = (input2.type!='checkbox');
+ }
+ });
+ input1.checked = false; // chrome reselects on back button which messes up the logic
+ } else if(input1.type=='submit'){
+ input1.disabled = true;
+ }
+ }
+});
+
+/**
+ * Add the event handler to the actiondropdown
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+addInitEvent(function(){
+ var selector = DOKUid('action__selector');
+ if(!selector) return;
+
+ addEvent(selector,'change',function(e){
+ this.form.submit();
+ });
+
+ DOKUid('action__selectorbtn').style.display = 'none';
+});
+
+/**
+ * Display error for Windows Shares on browsers other than IE
+ *
+ * @author Michael Klier <chi@chimeric.de>
+ */
+function checkWindowsShares() {
+ if(!LANG['nosmblinks']) return true;
+ var elems = getElementsByClass('windows',document,'a');
+ if(elems){
+ for(var i=0; i<elems.length; i++){
+ var share = elems[i];
+ addEvent(share,'click',function(){
+ if(document.all == null) {
+ alert(LANG['nosmblinks']);
+ }
+ });
+ }
+ }
+}
+
+/**
+ * Add the event handler for the Windows Shares check
+ *
+ * @author Michael Klier <chi@chimeric.de>
+ */
+addInitEvent(function(){
+ checkWindowsShares();
+});
+
+/**
+ * Highlight the section when hovering over the appropriate section edit button
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+addInitEvent(function(){
+ var break_classes = new RegExp('secedit|toc|page');
+ var btns = getElementsByClass('btn_secedit',document,'form');
+ for(var i=0; i<btns.length; i++){
+ addEvent(btns[i],'mouseover',function(e){
+ var tgt = e.target;
+ if(tgt.form) tgt = tgt.form;
+ tgt = tgt.parentNode.previousSibling;
+ if(tgt.nodeName != "DIV") tgt = tgt.previousSibling;
+ while(!break_classes.test(tgt.className)) {
+ tgt.className += ' section_highlight';
+ if (tgt.tagName == 'H1') break;
+ tgt = (tgt.previousSibling != null) ? tgt.previousSibling : tgt.parentNode;
+ }
+ });
+
+ addEvent(btns[i],'mouseout',function(e){
+ var secs = getElementsByClass('section_highlight');
+ for(var j=0; j<secs.length; j++){
+ secs[j].className = secs[j].className.replace(/section_highlight/,'');
+ }
+ var secs = getElementsByClass('section_highlight');
+ });
+ }
+});
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/textselection.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/textselection.js
new file mode 100644
index 000000000..39dd4cc41
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/textselection.js
@@ -0,0 +1,226 @@
+/**
+ * Text selection related functions.
+ */
+
+/**
+ * selection prototype
+ *
+ * Object that capsulates the selection in a textarea. Returned by getSelection.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function selection_class(){
+ this.start = 0;
+ this.end = 0;
+ this.obj = null;
+ this.rangeCopy = null;
+ this.scroll = 0;
+ this.fix = 0;
+
+ this.getLength = function(){
+ return this.end - this.start;
+ };
+
+ this.getText = function(){
+ if(!this.obj) return '';
+ return this.obj.value.substring(this.start,this.end);
+ }
+}
+
+/**
+ * Get current selection/cursor position in a given textArea
+ *
+ * @link http://groups.drupal.org/node/1210
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @link http://linebyline.blogspot.com/2006/11/textarea-cursor-position-in-internet.html
+ * @returns object - a selection object
+ */
+function getSelection(textArea) {
+ var sel = new selection_class();
+
+ sel.obj = textArea;
+ sel.start = textArea.value.length;
+ sel.end = textArea.value.length;
+
+ textArea.focus();
+ if(document.getSelection) { // Mozilla et al.
+ sel.start = textArea.selectionStart;
+ sel.end = textArea.selectionEnd;
+ sel.scroll = textArea.scrollTop;
+ } else if(document.selection) { // MSIE
+ /*
+ * This huge lump of code is neccessary to work around two MSIE bugs:
+ *
+ * 1. Selections trim newlines at the end of the code
+ * 2. Selections count newlines as two characters
+ */
+
+ // The current selection
+ sel.rangeCopy = document.selection.createRange().duplicate();
+
+ var before_range = document.body.createTextRange();
+ before_range.moveToElementText(textArea); // Selects all the text
+ before_range.setEndPoint("EndToStart", sel.rangeCopy); // Moves the end where we need it
+
+ var before_finished = false, selection_finished = false;
+ var before_text, selection_text;
+ // Load the text values we need to compare
+ before_text = before_range.text;
+ selection_text = sel.rangeCopy.text;
+
+ sel.start = before_text.length;
+ sel.end = sel.start + selection_text.length;
+
+ // Check each range for trimmed newlines by shrinking the range by 1 character and seeing
+ // if the text property has changed. If it has not changed then we know that IE has trimmed
+ // a \r\n from the end.
+ do {
+ if (!before_finished) {
+ if (before_range.compareEndPoints("StartToEnd", before_range) == 0) {
+ before_finished = true;
+ } else {
+ before_range.moveEnd("character", -1);
+ if (before_range.text == before_text) {
+ sel.start += 2;
+ sel.end += 2;
+ } else {
+ before_finished = true;
+ }
+ }
+ }
+ if (!selection_finished) {
+ if (sel.rangeCopy.compareEndPoints("StartToEnd", sel.rangeCopy) == 0) {
+ selection_finished = true;
+ } else {
+ sel.rangeCopy.moveEnd("character", -1);
+ if (sel.rangeCopy.text == selection_text) {
+ sel.end += 2;
+ } else {
+ selection_finished = true;
+ }
+ }
+ }
+ } while ((!before_finished || !selection_finished));
+
+
+ // count number of newlines in str to work around stupid IE selection bug
+ var countNL = function(str) {
+ var m = str.split("\r\n");
+ if (!m || !m.length) return 0;
+ return m.length-1;
+ };
+ sel.fix = countNL(sel.obj.value.substring(0,sel.start));
+
+ }
+ return sel;
+}
+
+/**
+ * Set the selection
+ *
+ * You need to get a selection object via getSelection() first, then modify the
+ * start and end properties and pass it back to this function.
+ *
+ * @link http://groups.drupal.org/node/1210
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @param object selection - a selection object as returned by getSelection()
+ */
+function setSelection(selection){
+ if(document.getSelection){ // FF
+ // what a pleasure in FF ;)
+ selection.obj.setSelectionRange(selection.start,selection.end);
+ if(selection.scroll) selection.obj.scrollTop = selection.scroll;
+ } else if(document.selection) { // IE
+ selection.rangeCopy.collapse(true);
+ selection.rangeCopy.moveStart('character',selection.start - selection.fix);
+ selection.rangeCopy.moveEnd('character',selection.end - selection.start);
+ selection.rangeCopy.select();
+ }
+}
+
+/**
+ * Inserts the given text at the current cursor position or replaces the current
+ * selection
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @param string text - the new text to be pasted
+ * @param objct selecttion - selection object returned by getSelection
+ * @param int opts.startofs - number of charcters at the start to skip from new selection
+ * @param int opts.endofs - number of characters at the end to skip from new selection
+ * @param bool opts.nosel - set true if new text should not be selected
+ */
+function pasteText(selection,text,opts){
+ if(!opts) opts = {};
+ // replace the content
+
+ selection.obj.value =
+ selection.obj.value.substring(0, selection.start) + text +
+ selection.obj.value.substring(selection.end, selection.obj.value.length);
+
+ // set new selection
+ selection.end = selection.start + text.length;
+
+ // modify the new selection if wanted
+ if(opts.startofs) selection.start += opts.startofs;
+ if(opts.endofs) selection.end -= opts.endofs;
+
+ // no selection wanted? set cursor to end position
+ if(opts.nosel) selection.start = selection.end;
+
+ setSelection(selection);
+}
+
+
+/**
+ * Format selection
+ *
+ * Apply tagOpen/tagClose to selection in textarea, use sampleText instead
+ * of selection if there is none.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function insertTags(textAreaID, tagOpen, tagClose, sampleText){
+ var txtarea = DOKUid(textAreaID);
+
+ var selection = getSelection(txtarea);
+ var text = selection.getText();
+ var opts;
+
+ // don't include trailing space in selection
+ if(text.charAt(text.length - 1) == ' '){
+ selection.end--;
+ text = selection.getText();
+ }
+
+ if(!text){
+ // nothing selected, use the sample text and select it
+ text = sampleText;
+ opts = {
+ startofs: tagOpen.length,
+ endofs: tagClose.length
+ };
+ }else{
+ // place cursor at the end
+ opts = {
+ nosel: true
+ };
+ }
+
+ // surround with tags
+ text = tagOpen + text + tagClose;
+
+ // do it
+ pasteText(selection,text,opts);
+}
+
+/**
+ * Wraps around pasteText() for backward compatibility
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function insertAtCarret(textAreaID, text){
+ var txtarea = DOKUid(textAreaID);
+ var selection = getSelection(txtarea);
+ pasteText(selection,text,{nosel: true});
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/toolbar.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/toolbar.js
new file mode 100644
index 000000000..d9633ef2d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/toolbar.js
@@ -0,0 +1,252 @@
+
+// used to identify pickers
+var pickercounter=0;
+
+/**
+ * Create a toolbar
+ *
+ * @param string tbid ID of the element where to insert the toolbar
+ * @param string edid ID of the editor textarea
+ * @param array tb Associative array defining the buttons
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function initToolbar(tbid,edid,tb){
+ var toolbar = DOKUid(tbid);
+ if(!toolbar) return;
+ var edit = DOKUid(edid);
+ if(!edit) return;
+ if(edit.readOnly) return;
+
+ //empty the toolbar area:
+ toolbar.innerHTML='';
+
+ var cnt = tb.length;
+ for(var i=0; i<cnt; i++){
+ var actionFunc;
+
+ // create new button
+ var btn = createToolButton(tb[i]['icon'],
+ tb[i]['title'],
+ tb[i]['key']);
+
+
+ // type is a tb function -> assign it as onclick
+ actionFunc = 'tb_'+tb[i]['type'];
+ if( isFunction(window[actionFunc]) ){
+ addEvent(btn,'click', bind(window[actionFunc],btn,tb[i],edid));
+ toolbar.appendChild(btn);
+ continue;
+ }
+
+ // type is a init function -> execute it
+ actionFunc = 'addBtnAction'+tb[i]['type'].charAt(0).toUpperCase()+tb[i]['type'].substring(1);
+ if( isFunction(window[actionFunc]) ){
+ if(window[actionFunc](btn, tb[i], edid)){
+ toolbar.appendChild(btn);
+ }
+ continue;
+ }
+
+ alert('unknown toolbar type: '+tb[i]['type']+' '+actionFunc);
+ } // end for
+
+}
+
+/**
+ * Button action for format buttons
+ *
+ * @param DOMElement btn Button element to add the action to
+ * @param array props Associative array of button properties
+ * @param string edid ID of the editor textarea
+ * @author Gabriel Birke <birke@d-scribe.de>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tb_format(btn, props, edid) {
+ var sample = props['title'];
+ if(props['sample']){
+ sample = props['sample'];
+ }
+ insertTags(edid,
+ fixtxt(props['open']),
+ fixtxt(props['close']),
+ fixtxt(sample));
+ pickerClose();
+ return false;
+}
+
+/**
+ * Button action for format buttons
+ *
+ * This works exactly as tb_format() except that, if multiple lines
+ * are selected, each line will be formatted seperately
+ *
+ * @param DOMElement btn Button element to add the action to
+ * @param array props Associative array of button properties
+ * @param string edid ID of the editor textarea
+ * @author Gabriel Birke <birke@d-scribe.de>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tb_formatln(btn, props, edid) {
+ var sample = props['title'];
+ if(props['sample']){
+ sample = props['sample'];
+ }
+ sample = fixtxt(sample);
+
+ props['open'] = fixtxt(props['open']);
+ props['close'] = fixtxt(props['close']);
+
+ // is something selected?
+ var opts;
+ var selection = getSelection(DOKUid(edid));
+ if(selection.getLength()){
+ sample = selection.getText();
+ opts = {nosel: true};
+ }else{
+ opts = {
+ startofs: props['open'].length,
+ endofs: props['close'].length
+ };
+ }
+
+ sample = sample.split("\n").join(props['close']+"\n"+props['open']);
+ sample = props['open']+sample+props['close'];
+
+ pasteText(selection,sample,opts);
+
+ pickerClose();
+ return false;
+}
+
+/**
+ * Button action for insert buttons
+ *
+ * @param DOMElement btn Button element to add the action to
+ * @param array props Associative array of button properties
+ * @param string edid ID of the editor textarea
+ * @author Gabriel Birke <birke@d-scribe.de>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tb_insert(btn, props, edid) {
+ insertAtCarret(edid,fixtxt(props['insert']));
+ pickerClose();
+ return false;
+}
+
+/**
+ * Button action for the media popup
+ *
+ * @param DOMElement btn Button element to add the action to
+ * @param array props Associative array of button properties
+ * @param string edid ID of the editor textarea
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tb_mediapopup(btn, props, edid) {
+ window.open(
+ DOKU_BASE+props['url']+encodeURIComponent(NS),
+ props['name'],
+ props['options']);
+ return false;
+}
+
+/**
+ * Button action for automatic headlines
+ *
+ * Insert a new headline based on the current section level
+ *
+ * @param DOMElement btn Button element to add the action to
+ * @param array props Associative array of button properties
+ * @param string edid ID of the editor textarea
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tb_autohead(btn, props, edid){
+ var lvl = currentHeadlineLevel(edid);
+
+ // determine new level
+ lvl += props['mod'];
+ if(lvl < 1) lvl = 1;
+ if(lvl > 5) lvl = 5;
+
+ var tags = '=';
+ for(var i=0; i<=5-lvl; i++) tags += '=';
+ insertTags(edid, tags+' ', ' '+tags+"\n", props['text']);
+ pickerClose();
+ return false;
+}
+
+
+/**
+ * Add button action for picker buttons and create picker element
+ *
+ * @param DOMElement btn Button element to add the action to
+ * @param array props Associative array of button properties
+ * @param string edid ID of the editor textarea
+ * @return boolean If button should be appended
+ * @author Gabriel Birke <birke@d-scribe.de>
+ */
+function addBtnActionPicker(btn, props, edid) {
+ var pickerid = 'picker'+(pickercounter++);
+ createPicker(pickerid, props, edid);
+ addEvent(btn,'click',function(){
+ pickerToggle(pickerid,btn);
+ return false;
+ });
+ return true;
+}
+
+/**
+ * Add button action for the link wizard button
+ *
+ * @param DOMElement btn Button element to add the action to
+ * @param array props Associative array of button properties
+ * @param string edid ID of the editor textarea
+ * @return boolean If button should be appended
+ * @author Andreas Gohr <gohr@cosmocode.de>
+ */
+function addBtnActionLinkwiz(btn, props, edid) {
+ linkwiz.init(DOKUid(edid));
+ addEvent(btn,'click',function(){
+ linkwiz.toggle();
+ return false;
+ });
+ return true;
+}
+
+/**
+ * Show/Hide a previosly created picker window
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function pickerToggle(pickerid,btn){
+ var picker = DOKUid(pickerid);
+ if(picker.style.marginLeft == '-10000px'){
+ var x = findPosX(btn);
+ var y = findPosY(btn);
+ picker.style.left = (x+3)+'px';
+ picker.style.top = (y+btn.offsetHeight+3)+'px';
+ picker.style.marginLeft = '0px';
+ }else{
+ picker.style.marginLeft = '-10000px';
+ }
+}
+
+/**
+ * Close all open pickers
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function pickerClose(){
+ var pobjs = getElementsByClass('picker');
+ for(var i=0; i<pobjs.length; i++){
+ pobjs[i].style.marginLeft = '-10000px';
+ }
+}
+
+
+/**
+ * Replaces \n with linebreaks
+ */
+function fixtxt(str){
+ return str.replace(/\\n/g,"\n");
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/tw-sack.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/tw-sack.js
new file mode 100644
index 000000000..cfcbe0ea9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/tw-sack.js
@@ -0,0 +1,136 @@
+/* Simple AJAX Code-Kit (SACK) */
+/* ©2005 Gregory Wild-Smith */
+/* www.twilightuniverse.com */
+/* Software licenced under a modified X11 licence, see documentation or authors website for more details */
+
+function sack(file){
+ this.AjaxFailedAlert = "Your browser does not support the enhanced functionality of this website, and therefore you will have an experience that differs from the intended one.\n";
+ this.requestFile = file;
+ this.method = "POST";
+ this.URLString = "";
+ this.encodeURIString = true;
+ this.execute = false;
+
+ this.onLoading = function() { };
+ this.onLoaded = function() { };
+ this.onInteractive = function() { };
+ this.onCompletion = function() { };
+ this.afterCompletion = function() { };
+
+ this.createAJAX = function() {
+ try {
+ this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
+ } catch (e) {
+ try {
+ this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
+ } catch (err) {
+ this.xmlhttp = null;
+ }
+ }
+ if(!this.xmlhttp && typeof XMLHttpRequest != "undefined"){
+ this.xmlhttp = new XMLHttpRequest();
+ }
+ if (!this.xmlhttp){
+ this.failed = true;
+ }
+ };
+
+ this.setVar = function(name, value){
+ if (this.URLString.length < 3){
+ this.URLString = name + "=" + value;
+ } else {
+ this.URLString += "&" + name + "=" + value;
+ }
+ };
+
+ this.encVar = function(name, value){
+ var varString = encodeURIComponent(name) + "=" + encodeURIComponent(value);
+ return varString;
+ };
+
+ this.encodeURLString = function(string){
+ varArray = string.split('&');
+ for (i = 0; i < varArray.length; i++){
+ urlVars = varArray[i].split('=');
+ if (urlVars[0].indexOf('amp;') != -1){
+ urlVars[0] = urlVars[0].substring(4);
+ }
+ varArray[i] = this.encVar(urlVars[0],urlVars[1]);
+ }
+ return varArray.join('&');
+ };
+
+ this.runResponse = function(){
+ eval(this.response);
+ };
+
+ this.runAJAX = function(urlstring){
+ this.responseStatus = new Array(2);
+ if(this.failed && this.AjaxFailedAlert){
+ alert(this.AjaxFailedAlert);
+ } else {
+ if (urlstring){
+ if (this.URLString.length){
+ this.URLString = this.URLString + "&" + urlstring;
+ } else {
+ this.URLString = urlstring;
+ }
+ }
+ if (this.encodeURIString){
+ var timeval = new Date().getTime();
+ this.URLString = this.encodeURLString(this.URLString);
+ this.setVar("rndval", timeval);
+ }
+ if (this.element) { this.elementObj = document.getElementById(this.element); }
+ if (this.xmlhttp) {
+ var self = this;
+ if (this.method == "GET") {
+ var totalurlstring = this.requestFile + "?" + this.URLString;
+ this.xmlhttp.open(this.method, totalurlstring, true);
+ } else {
+ this.xmlhttp.open(this.method, this.requestFile, true);
+ }
+ if (this.method == "POST"){
+ try {
+ this.xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
+ } catch (e) {}
+ }
+
+ this.xmlhttp.onreadystatechange = function() {
+ switch (self.xmlhttp.readyState){
+ case 1:
+ self.onLoading();
+ break;
+ case 2:
+ self.onLoaded();
+ break;
+ case 3:
+ self.onInteractive();
+ break;
+ case 4:
+ self.response = self.xmlhttp.responseText;
+ self.responseXML = self.xmlhttp.responseXML;
+ self.responseStatus[0] = self.xmlhttp.status;
+ self.responseStatus[1] = self.xmlhttp.statusText;
+ self.onCompletion();
+ if(self.execute){ self.runResponse(); }
+ if (self.elementObj) {
+ var elemNodeName = self.elementObj.nodeName;
+ elemNodeName.toLowerCase();
+ if (elemNodeName == "input" || elemNodeName == "select" || elemNodeName == "option" || elemNodeName == "textarea"){
+ self.elementObj.value = self.response;
+ } else {
+ self.elementObj.innerHTML = self.response;
+ }
+ }
+ self.afterCompletion();
+ self.URLString = "";
+ break;
+ }
+ };
+ this.xmlhttp.send(this.URLString);
+ }
+ }
+ };
+this.createAJAX();
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/styles/feed.css b/mod/dokuwiki/vendors/dokuwiki/lib/styles/feed.css
new file mode 100644
index 000000000..44b72d770
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/styles/feed.css
@@ -0,0 +1,63 @@
+rss channel, feed, RDF {
+ font: 80% "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif;
+ background-color: __background__;
+ color: __text__;
+ margin: 0;
+ padding: 0;
+}
+
+
+link, description, language, managingEditor, copyright, lastBuildDate, date,
+pubDate, generator, webMaster, ttl, docs, tagline, author, copyright,
+generator, content, created, issued, modified, subject, id, format, creator,
+category, image {
+ display: none;
+}
+
+item link, entry id {
+ display: block;
+ color: __extern__;
+ text-decoration: underline;
+}
+
+channel title, feed title {
+ display: block;
+ font-size: 200%;
+ font-weight: bolder;
+ color: __extern__;
+ text-decoration: none;
+ border-bottom: 20px solid __background_alt__;
+}
+
+:root:before {
+ content: "This data file is meant to be read in a XML feed reader. See document source."
+}
+
+item, entry {
+ display: block;
+ margin: 1em 180px 1em 1em;
+ border-bottom: 1px solid __border__;
+ padding-bottom: 1em;
+}
+
+item title, entry title {
+ display: block;
+ background: transparent none;
+ border: 0px solid __background_other__;
+ padding: 0;
+ color: __text_alt__;
+ font-size: 1.4em;
+ font-weight: bold;
+}
+
+item pubDate, entry modified, item date {
+ display: inline;
+ color: __text_neu__;
+ font: 1em trebuchet ms, arial, helvetica, sans-serif;
+}
+
+item description, entry summary {
+ display: block;
+ clear: both;
+ padding-top: 0.5em;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/styles/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/styles/index.html
new file mode 100644
index 000000000..d614603ac
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/styles/index.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="refresh" content="0; URL=../../" />
+<meta name="robots" content="noindex" />
+<title>nothing here...</title>
+</head>
+<body>
+<!-- this is just here to prevent directory browsing -->
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/styles/style.css b/mod/dokuwiki/vendors/dokuwiki/lib/styles/style.css
new file mode 100644
index 000000000..814191615
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/styles/style.css
@@ -0,0 +1,113 @@
+/**
+ * Basic styles. These styles are needed for basic DokuWiki functions
+ * regardless of the used template. Templates can override them of course
+ */
+
+div.clearer {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ overflow: hidden;
+}
+
+div.no {
+ display: inline;
+ margin: 0;
+ padding: 0;
+}
+
+.hidden {
+ display: none;
+}
+
+div.error {
+ background: #fcc url(../images/error.png) 0.5em 0px no-repeat;
+ color: #000;
+ border-bottom: 1px solid #faa;
+ font-size: 90%;
+ margin: 0;
+ padding-left: 3em;
+ overflow: hidden;
+}
+
+div.info {
+ background: #ccf url(../images/info.png) 0.5em 0px no-repeat;
+ color: #000;
+ border-bottom: 1px solid #aaf;
+ font-size: 90%;
+ margin: 0;
+ padding-left: 3em;
+ overflow: hidden;
+}
+
+div.success {
+ background: #cfc url(../images/success.png) 0.5em 0px no-repeat;
+ color: #000;
+ border-bottom: 1px solid #afa;
+ font-size: 90%;
+ margin: 0;
+ padding-left: 3em;
+ overflow: hidden;
+}
+
+div.notify {
+ background: #ffc url(../images/notify.png) 0.5em 0px no-repeat;
+ color: #000;
+ border-bottom: 1px solid #ffa;
+ font-size: 90%;
+ margin: 0;
+ padding-left: 3em;
+ overflow: hidden;
+}
+
+
+/* image alignment */
+.medialeft {
+ float: left;
+}
+.mediaright {
+ float: right;
+}
+.mediacenter {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.leftalign { text-align: left; }
+.centeralign { text-align: center; }
+.rightalign { text-align: right; }
+
+em.u {
+ font-style: normal;
+ text-decoration: underline;
+}
+em em.u {
+ font-style: italic;
+}
+
+
+/* syntax highlighting code */
+.code .br0 { color: #66cc66; }
+.code .co0 { color: #808080; font-style: italic; }
+.code .co1 { color: #808080; font-style: italic; }
+.code .co2 { color: #808080; font-style: italic; }
+.code .co3 { color: #808080; }
+.code .coMULTI { color: #808080; font-style: italic; }
+.code .es0 { color: #000099; font-weight: bold; }
+.code .kw1 { color: #b1b100; }
+.code .kw2 { color: #000000; font-weight: bold; }
+.code .kw3 { color: #000066; }
+.code .kw4 { color: #993333; }
+.code .kw5 { color: #0000ff; }
+.code .me1 { color: #006600; }
+.code .me2 { color: #006600; }
+.code .nu0 { color: #cc66cc; }
+.code .re0 { color: #0000ff; }
+.code .re1 { color: #0000ff; }
+.code .re2 { color: #0000ff; }
+.code .re3 { color: #ff3333; font-weight:bold; }
+.code .re4 { color: #009999; }
+.code .st0 { color: #ff0000; }
+.code .sy0 { color: #66cc66; }
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/conf/default.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/conf/default.php
new file mode 100644
index 000000000..37a6110ec
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/conf/default.php
@@ -0,0 +1,8 @@
+<?php
+// sidebar configuration settings
+$conf['enable'] = 1; // 1 or true to enable sidebar functionality, 0 or false to disable it
+$conf['page'] = 'sidebar'; // name of sidebar page
+$conf['layout'] = 'inside'; // inside (between button bars) or outside (full height of dokuwiki)
+$conf['orientation'] = 'left'; // left or right
+$conf['showeditbtn'] = 1; // show a sidebar edit button IF USER HAS EDIT PERMISSION FOR SIDEBAR
+$conf['editbtntxt'] = 'edit sidebar';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/conf/metadata.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/conf/metadata.php
new file mode 100644
index 000000000..f37e32c60
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/conf/metadata.php
@@ -0,0 +1,9 @@
+<?php
+// sidebar configuration settings
+$meta['enable'] = array('onoff');
+$meta['page'] = array('string');
+$meta['layout'] = array('multichoice', '_choices' => array('inside','outside'));
+$meta['orientation'] = array('multichoice', '_choices' => array('left','right'));
+//$meta['showeditbtn'] = array('onoff');
+//$meta['editbtntxt'] = array('string');
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/design.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/design.css
new file mode 100644
index 000000000..2611daad0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/design.css
@@ -0,0 +1,796 @@
+/**
+ * Design elements for default Template
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Anika Henke <anika@selfthinker.org>
+ */
+
+/* -------------- general elements --------------- */
+
+* { padding: 0; margin: 0; }
+
+/*body {
+ font: 80% "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif;
+ background-color: __background__;
+ color: __text__;
+}*/
+
+/* the document */
+div.dokuwiki div.page {
+ margin: 4px 2em 0 1em;
+ text-align: justify;
+}
+
+div.dokuwiki table {
+ font-size: 100%;
+}
+
+div.dokuwiki tr,
+div.dokuwiki td,
+div.dokuwiki th {
+}
+
+div.dokuwiki img {
+ border: 0;
+}
+
+div.dokuwiki p,
+div.dokuwiki blockquote,
+div.dokuwiki table,
+div.dokuwiki pre {
+ margin: 0 0 1.0em 0;
+}
+
+div.dokuwiki hr {
+ border: 0px;
+ border-top: 1px solid __border__;
+ text-align: center;
+ height: 0px;
+}
+
+div.dokuwiki div.nothing {
+ text-align: center;
+ margin: 2em;
+}
+
+/* ---------------- forms ------------------------ */
+
+div.dokuwiki form {
+ border: none;
+ display: inline;
+}
+
+div.dokuwiki label.block {
+ display: block;
+ text-align: right;
+ font-weight: bold;
+}
+
+div.dokuwiki label.simple {
+ display: block;
+ text-align: left;
+ font-weight: normal;
+}
+
+div.dokuwiki label.block input.edit {
+ width: 50%;
+}
+
+div.dokuwiki fieldset {
+ width: 300px;
+ text-align: center;
+ border: 1px solid __border__;
+ padding: 0.5em;
+ margin: auto;
+}
+
+div.dokuwiki textarea.edit {
+ font-family: monospace;
+ font-size: 14px;
+ color: __text__;
+ background-color: __background__;
+ border: 1px solid __border__;
+ padding: 0.3em 0 0 0.3em;
+ width: 100%;
+}
+
+/* nice alphatransparency background except for IE <7 */
+html>body div.dokuwiki textarea.edit {
+ background: __background__ url(images/inputshadow.png) repeat-x top;
+}
+
+div.dokuwiki input.edit,
+div.dokuwiki select.edit {
+ font-size: 100%;
+ border: 1px solid __border__;
+ color: __text__;
+ background-color: __background__;
+ vertical-align: middle;
+ margin: 1px;
+ padding: 0.20em 0.3em;
+ display: inline;
+}
+
+/* nice alphatransparency background except for IE <7 */
+html>body div.dokuwiki input.edit,
+html>body div.dokuwiki select.edit {
+ background: __background__ url(images/inputshadow.png) repeat-x top;
+}
+
+div.dokuwiki select.edit {
+ padding: 0.1em 0;
+}
+
+div.dokuwiki input.missing {
+ font-size: 100%;
+ border: 1px solid __border__;
+ color: __text__;
+ background-color: #ffcccc;
+ vertical-align: middle;
+ margin: 1px;
+ padding: 0.20em 0.3em;
+ display: inline;
+}
+
+/* disabled style - not understood by IE */
+div.dokuwiki textarea.edit[disabled],
+div.dokuwiki textarea.edit[readonly],
+div.dokuwiki input.edit[disabled],
+div.dokuwiki input.edit[readonly],
+div.dokuwiki select.edit[disabled] {
+ background-color: __background_neu__!important;
+ color: __text_neu__!important;
+}
+
+/* edit form */
+div.dokuwiki div.toolbar,
+div.dokuwiki div#wiki__editbar {
+ margin: 2px 0;
+ text-align: left;
+}
+div.dokuwiki div#size__ctl {
+ float: right;
+ width: 60px;
+ height: 2.7em;
+}
+div.dokuwiki #size__ctl img {
+ cursor: pointer;
+}
+div.dokuwiki div#wiki__editbar div.editButtons {
+ float: left;
+ padding: 0 1.0em 0.7em 0;
+}
+div.dokuwiki div#wiki__editbar div.summary {
+ float: left;
+}
+div.dokuwiki .nowrap {
+ white-space: nowrap;
+}
+div.dokuwiki div#draft__status {
+ float: right;
+ color: __text_alt__;
+}
+
+div.dokuwiki form#dw__editform div.license {
+ clear: left;
+ font-size: 90%;
+}
+
+div.dokuwiki p.license {
+ font-size: 90%;
+ text-align: center;
+}
+
+/* --------- buttons ------------------- */
+
+div.dokuwiki input.button,
+div.dokuwiki button.button {
+ border: 1px solid __border__;
+ color: __text__;
+ background-color: __background__;
+ vertical-align: middle;
+ text-decoration: none;
+ font-size: 100%;
+ cursor: pointer;
+ margin: 1px;
+ padding: 0.125em 0.4em;
+}
+
+/* nice alphatransparency background except for IE <7 */
+html>body div.dokuwiki input.button,
+html>body div.dokuwiki button.button {
+ background: __background__ url(images/buttonshadow.png) repeat-x bottom;
+}
+
+* html div.dokuwiki input.button,
+* html div.dokuwiki button.button {
+ height: 1.8em;
+}
+
+div.dokuwiki div.secedit input.button {
+ border: 1px solid __border__;
+ color: __text__;
+ background-color: __background__;
+ vertical-align: middle;
+ text-decoration: none;
+ margin: 0;
+ padding: 0;
+ font-size: 10px;
+ cursor: pointer;
+ float: right;
+ display: inline;
+}
+
+/* ----------- page navigator ------------- */
+
+div.dokuwiki div.pagenav {
+ margin: 1em 0 0 0;
+}
+
+div.dokuwiki div.pagenav-prev {
+ text-align: right;
+ float: left;
+ width: 49%
+}
+
+div.dokuwiki div.pagenav-next {
+ text-align: left;
+ float: right;
+ width: 49%
+}
+
+/* --------------- Links ------------------ */
+
+div.dokuwiki a:link,
+div.dokuwiki a:visited {
+ color: __extern__;
+ text-decoration: none;
+}
+div.dokuwiki a:hover,
+div.dokuwiki a:active {
+ color: __text__;
+ text-decoration: underline;
+}
+
+div.dokuwiki h1 a,
+div.dokuwiki h2 a,
+div.dokuwiki h3 a,
+div.dokuwiki h4 a,
+div.dokuwiki h5 a,
+div.dokuwiki a.nolink {
+ color: __text__ !important;
+ text-decoration: none !important;
+}
+
+/* external link */
+div.dokuwiki a.urlextern {
+ background: transparent url(images/link_icon.gif) 0px 1px no-repeat;
+ padding: 1px 0px 1px 16px;
+}
+
+/* windows share */
+div.dokuwiki a.windows {
+ background: transparent url(images/windows.gif) 0px 1px no-repeat;
+ padding: 1px 0px 1px 16px;
+}
+
+/* interwiki link (icon are set by dokuwiki) */
+div.dokuwiki a.interwiki {
+}
+
+/* link to some embedded media */
+div.dokuwiki a.media {
+}
+
+div.dokuwiki a.urlextern:link,
+div.dokuwiki a.windows:link,
+div.dokuwiki a.interwiki:link {
+ color: __extern__;
+}
+
+div.dokuwiki a.urlextern:visited,
+div.dokuwiki a.windows:visited,
+div.dokuwiki a.interwiki:visited {
+ color: purple;
+}
+div.dokuwiki a.urlextern:hover,
+div.dokuwiki a.urlextern:active,
+div.dokuwiki a.windows:hover,
+div.dokuwiki a.windows:active,
+div.dokuwiki a.interwiki:hover,
+div.dokuwiki a.interwiki:active {
+ color: __text__;
+}
+
+/* email link */
+div.dokuwiki a.mail {
+ background: transparent url(images/mail_icon.gif) 0px 1px no-repeat;
+ padding: 1px 0px 1px 16px;
+}
+
+/* existing wikipage */
+div.dokuwiki a.wikilink1 {
+ color: __existing__ !important;
+}
+
+/* not existing wikipage */
+div.dokuwiki a.wikilink2 {
+ color: __missing__ !important;
+ text-decoration: none !important;
+ border-bottom: dashed 1px __missing__ !important;
+}
+
+/* ------------- Page elements ----------------- */
+
+div.dokuwiki div.preview {
+ background-color: __background_neu__;
+ margin: 0 0 0 2em;
+ padding: 4px;
+ border: 1px dashed __text__;
+}
+
+div.dokuwiki div.breadcrumbs {
+ background-color: __background_neu__;
+ color: __text_neu__;
+ font-size: 80%;
+ padding: 0 0 0 4px;
+}
+
+div.dokuwiki span.user {
+ color: __text_other__;
+ font-size: 90%;
+}
+
+div.dokuwiki li.minor {
+ color: __text_neu__;
+ font-style: italic;
+}
+
+/* embedded images */
+div.dokuwiki img.media {
+ margin: 3px;
+}
+
+div.dokuwiki img.medialeft {
+ border: 0;
+ float: left;
+ margin: 0 1.5em 0 0;
+}
+
+div.dokuwiki img.mediaright {
+ border: 0;
+ float: right;
+ margin: 0 0 0 1.5em;
+}
+
+div.dokuwiki img.mediacenter {
+ border: 0;
+ display: block;
+ margin: 0 auto;
+}
+
+/* smileys */
+div.dokuwiki img.middle {
+ vertical-align: middle;
+}
+
+div.dokuwiki acronym {
+ cursor: help;
+ border-bottom: 1px dotted __text__;
+}
+
+/* general headline setup */
+div.dokuwiki h1,
+div.dokuwiki h2,
+div.dokuwiki h3,
+div.dokuwiki h4,
+div.dokuwiki h5 {
+ color: __text__;
+ background-color: inherit;
+ font-size: 100%;
+ font-weight: normal;
+ margin: 0 0 1em 0;
+ padding: 0.5em 0 0 0;
+ border-bottom: 1px solid __border__;
+ clear: left;
+}
+
+/* special headlines */
+div.dokuwiki h1 {font-size: 160%; margin-left: 0px; font-weight: bold;}
+div.dokuwiki h2 {font-size: 150%; margin-left: 20px;}
+div.dokuwiki h3 {font-size: 140%; margin-left: 40px; border-bottom: none; font-weight: bold;}
+div.dokuwiki h4 {font-size: 120%; margin-left: 60px; border-bottom: none; font-weight: bold;}
+div.dokuwiki h5 {font-size: 100%; margin-left: 80px; border-bottom: none; font-weight: bold;}
+
+/* indent different sections */
+div.dokuwiki div.level1 {margin-left: 3px;}
+div.dokuwiki div.level2 {margin-left: 23px;}
+div.dokuwiki div.level3 {margin-left: 43px;}
+div.dokuwiki div.level4 {margin-left: 63px;}
+div.dokuwiki div.level5 {margin-left: 83px;}
+
+/* unordered lists */
+div.dokuwiki ul {
+ line-height: 1.5em;
+ list-style-type: square;
+ list-style-image: none;
+ margin: 0 0 1em 3.5em;
+ color: __text_alt__;
+}
+
+/* ordered lists */
+div.dokuwiki ol {
+ line-height: 1.5em;
+ list-style-image: none;
+ margin: 0 0 1em 3.5em;
+ color: __text_alt__;
+ font-weight: bold;
+}
+
+/* no gap in between nested lists */
+div.dokuwiki li ul {
+ margin-bottom: 0;
+}
+div.dokuwiki li ol {
+ margin-bottom: 0;
+}
+
+/* the list items overriding the ul/ol definition */
+div.dokuwiki .li {
+ color: __text__;
+ font-weight: normal;
+}
+
+div.dokuwiki ol {list-style-type: decimal}
+div.dokuwiki ol ol {list-style-type: upper-roman}
+div.dokuwiki ol ol ol {list-style-type: lower-alpha}
+div.dokuwiki ol ol ol ol {list-style-type: lower-greek}
+
+div.dokuwiki li.open {
+ list-style-image: url(images/open.gif);
+ /*list-style-type: circle;*/
+}
+
+div.dokuwiki li.closed {
+ list-style-image: url(images/closed.gif);
+ /*list-style-type: disc;*/
+}
+
+div.dokuwiki blockquote {
+ border-left: 2px solid __border__;
+ padding-left: 3px;
+}
+
+div.dokuwiki pre {
+ font-size: 120%;
+ padding: 0.5em;
+ border: 1px dashed __border__;
+ color: __text__;
+ overflow: auto;
+}
+
+/* code blocks by indention */
+div.dokuwiki pre.pre {
+ background-color: __background_other__;
+}
+
+/* code blocks by code tag */
+div.dokuwiki pre.code {
+ background-color: __background_other__;
+}
+
+/* inline code words */
+div.dokuwiki code {
+ font-size: 120%;
+}
+
+/* code blocks by file tag */
+div.dokuwiki pre.file {
+ background-color: __background_alt__;
+}
+
+/* inline tables */
+div.dokuwiki table.inline {
+ background-color: __background__;
+ border-spacing: 0px;
+ border-collapse: collapse;
+}
+
+div.dokuwiki table.inline th {
+ padding: 3px;
+ border: 1px solid __border__;
+ background-color: __background_alt__;
+}
+
+div.dokuwiki table.inline td {
+ padding: 3px;
+ border: 1px solid __border__;
+}
+
+/* ---------- table of contents ------------------- */
+
+div.dokuwiki div.toc {
+ margin: 1.2em 0 0 2em;
+ float: right;
+ width: 200px;
+ font-size: 80%;
+ clear: both;
+}
+
+div.dokuwiki div.tocheader {
+ border: 1px solid __border__;
+ background-color: __background_alt__;
+ text-align: left;
+ font-weight: bold;
+ padding: 3px;
+ margin-bottom: 2px;
+}
+
+div.dokuwiki span.toc_open,
+div.dokuwiki span.toc_close {
+ border: 0.4em solid __background_alt__;
+ float: right;
+ display: block;
+ margin: 0.4em 3px 0 0;
+}
+
+div.dokuwiki span.toc_open span,
+div.dokuwiki span.toc_close span {
+ display: none;
+}
+
+div.dokuwiki span.toc_open {
+ margin-top: 0.4em;
+ border-top: 0.4em solid __text__;
+}
+
+div.dokuwiki span.toc_close {
+ margin-top: 0;
+ border-bottom: 0.4em solid __text__;
+}
+
+div.dokuwiki #toc__inside {
+ border: 1px solid __border__;
+ background-color: __background__;
+ text-align: left;
+ padding: 0.5em 0 0.7em 0;
+}
+
+div.dokuwiki ul.toc {
+ list-style-type: none;
+ list-style-image: none;
+ line-height: 1.2em;
+ padding-left: 1em;
+ margin: 0;
+}
+
+div.dokuwiki ul.toc li {
+ background: transparent url(images/tocdot2.gif) 0 0.6em no-repeat;
+ padding-left: 0.4em;
+}
+
+div.dokuwiki ul.toc li.clear {
+ background-image: none;
+ padding-left: 0.4em;
+}
+
+div.dokuwiki a.toc:link,
+div.dokuwiki a.toc:visited {
+ color: __extern__;
+}
+
+div.dokuwiki a.toc:hover,
+div.dokuwiki a.toc:active {
+ color: __text__;
+}
+
+/* ---------------------------- Diff rendering --------------------------*/
+div.dokuwiki table.diff {
+ background-color: __background__;
+ width: 100%;
+}
+div.dokuwiki td.diff-blockheader {
+ font-weight: bold;
+}
+div.dokuwiki table.diff th {
+ border-bottom: 1px solid __border__;
+ font-size: 110%;
+ width: 50%;
+ font-weight: normal;
+ text-align: left;
+}
+div.dokuwiki table.diff th a {
+ font-weight: bold;
+}
+div.dokuwiki table.diff th span.user {
+ color: __text__;
+ font-size: 80%;
+}
+div.dokuwiki table.diff th span.sum {
+ font-size: 80%;
+ font-weight: bold;
+}
+div.dokuwiki table.diff th.minor {
+ font-style: italic;
+}
+div.dokuwiki table.diff td {
+ font-family: monospace;
+ font-size: 100%;
+}
+div.dokuwiki td.diff-addedline {
+ background-color: #ddffdd;
+}
+div.dokuwiki td.diff-deletedline {
+ background-color: #ffffbb;
+}
+div.dokuwiki td.diff-context {
+ background-color: __background_neu__;
+}
+div.dokuwiki table.diff td.diff-addedline strong,
+div.dokuwiki table.diff td.diff-deletedline strong {
+ color: red;
+}
+
+/* --------------------- footnotes -------------------------------- */
+
+div.dokuwiki div.footnotes {
+ clear: both;
+ border-top: 1px solid __border__;
+ padding-left: 1em;
+ margin-top: 1em;
+}
+
+div.dokuwiki div.fn {
+ font-size: 90%;
+}
+
+div.dokuwiki a.fn_bot {
+ font-weight: bold;
+}
+
+/* insitu-footnotes */
+div.insitu-footnote {
+ font-size: 80%;
+ line-height: 1.2em;
+ border: 1px solid __border__;
+ background-color: __background_other__;
+ text-align: left;
+ padding: 4px;
+ max-width: 40%; /* IE's width is handled in javascript */
+}
+
+/* overcome IE issue with one line code or file boxes which require h. scrolling */
+* html .insitu-footnote pre.code,
+* html .insitu-footnote pre.file {
+ padding-bottom: 18px;
+}
+
+/* --------------- search result formating --------------- */
+div.dokuwiki .search_result {
+ margin-bottom: 6px;
+ padding: 0 10px 0 30px;
+}
+
+div.dokuwiki .search_snippet {
+ color: __text_other__;
+ font-size: 12px;
+ margin-left: 20px;
+}
+
+div.dokuwiki .search_sep {
+ color: __text__;
+}
+
+div.dokuwiki .search_hit {
+ color: __text__;
+ background-color: __highlight__;
+}
+div.dokuwiki strong.search_hit {
+ font-weight: normal;
+}
+
+div.dokuwiki div.search_quickresult {
+ margin: 0 0 15px 30px;
+ padding: 0 10px 10px 0;
+ border-bottom: 1px dashed __border__;
+}
+div.dokuwiki div.search_quickresult h3 {
+ margin: 0 0 1.0em 0;
+ font-size: 1em;
+ font-weight: bold;
+}
+
+div.dokuwiki ul.search_quickhits {
+ margin: 0 0 0.5em 1.0em;
+}
+
+div.dokuwiki ul.search_quickhits li {
+ margin: 0 1.0em 0 1.0em;
+ float:left;
+ width: 30%;
+}
+
+/* ------------------ Additional ---------------------- */
+
+div.footerinc {
+ text-align: center;
+}
+.footerinc a img {
+ opacity: 0.5;
+ border: 0;
+}
+
+.footerinc a:hover img {
+ opacity: 1;
+}
+
+/* ---------- AJAX quicksearch ----------- */
+
+div.dokuwiki div.ajax_qsearch {
+ position: absolute;
+ right: 237px;;
+ width: 200px;
+ opacity: 0.9;
+ display: none;
+ font-size: 80%;
+ line-height: 1.2em;
+ border: 1px solid __border__;
+ background-color: __background_other__;
+ text-align: left;
+ padding: 4px;
+}
+
+/* --------- Toolbar -------------------- */
+button.toolbutton {
+ background-color: __background__;
+ padding: 0px;
+ margin: 0 1px 0 0;
+ border: 1px solid __border__;
+ cursor: pointer;
+}
+
+/* nice alphatransparency background except for IE <7 */
+html>body button.toolbutton {
+ background: __background__ url(images/buttonshadow.png) repeat-x bottom;
+}
+
+div.picker {
+ width: 250px;
+ border: 1px solid __border__;
+ background-color: __background_alt__;
+}
+
+button.pickerbutton {
+ padding: 0px;
+ margin: 0 1px 1px 0;
+ border: 0;
+ background-color: transparent;
+ font-size: 80%;
+ cursor: pointer;
+}
+
+/* --------------- Image Details ----------------- */
+
+div.dokuwiki div.img_big {
+ float: left;
+ margin-right: 0.5em;
+}
+
+div.dokuwiki dl.img_tags dt {
+ font-weight: bold;
+ background-color: __background_alt__;
+}
+div.dokuwiki dl.img_tags dd {
+ background-color: __background_neu__;
+}
+
+div.dokuwiki div.imagemeta {
+ color: __text_neu__;
+ font-size: 70%;
+ line-height: 95%;
+}
+
+div.dokuwiki div.imagemeta img.thumb {
+ float:left;
+ margin-right: 0.1em;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/detail.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/detail.php
new file mode 100644
index 000000000..765358568
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/detail.php
@@ -0,0 +1,89 @@
+<?php
+/**
+ * DokuWiki Image Detail Template
+ *
+ * This is the template for displaying image details
+ *
+ * You should leave the doctype at the very top - It should
+ * always be the very first line of a document.
+ *
+ * @link http://dokuwiki.org/templates
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+// must be run from within DokuWiki
+if (!defined('DOKU_INC')) die();
+
+?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $conf['lang']?>" lang="<?php echo $conf['lang']?>" dir="ltr">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>
+ <?php echo hsc(tpl_img_getTag('IPTC.Headline',$IMG))?>
+ [<?php echo strip_tags($conf['title'])?>]
+ </title>
+
+ <?php tpl_metaheaders()?>
+
+ <link rel="shortcut icon" href="<?php echo DOKU_TPL?>images/favicon.ico" />
+</head>
+
+<body>
+<div class="dokuwiki">
+ <?php html_msgarea()?>
+
+ <div class="page">
+ <?php if($ERROR){ print $ERROR; }else{ ?>
+
+ <h1><?php echo hsc(tpl_img_getTag('IPTC.Headline',$IMG))?></h1>
+
+ <div class="img_big">
+ <?php tpl_img(900,700) ?>
+ </div>
+
+ <div class="img_detail">
+ <p class="img_caption">
+ <?php print nl2br(hsc(tpl_img_getTag('simple.title'))); ?>
+ </p>
+
+ <p>&larr; <?php echo $lang['img_backto']?> <?php tpl_pagelink($ID)?></p>
+
+ <dl class="img_tags">
+ <?php
+ $t = tpl_img_getTag('Date.EarliestTime');
+ if($t) print '<dt>'.$lang['img_date'].':</dt><dd>'.strftime($conf['dformat'],$t).'</dd>';
+
+ $t = tpl_img_getTag('File.Name');
+ if($t) print '<dt>'.$lang['img_fname'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag(array('Iptc.Byline','Exif.TIFFArtist','Exif.Artist','Iptc.Credit'));
+ if($t) print '<dt>'.$lang['img_artist'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag(array('Iptc.CopyrightNotice','Exif.TIFFCopyright','Exif.Copyright'));
+ if($t) print '<dt>'.$lang['img_copyr'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag('File.Format');
+ if($t) print '<dt>'.$lang['img_format'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag('File.NiceSize');
+ if($t) print '<dt>'.$lang['img_fsize'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag('Simple.Camera');
+ if($t) print '<dt>'.$lang['img_camera'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag(array('IPTC.Keywords','IPTC.Category','xmp.dc:subject'));
+ if($t) print '<dt>'.$lang['img_keywords'].':</dt><dd>'.hsc($t).'</dd>';
+
+ ?>
+ </dl>
+ <?php //Comment in for Debug// dbg(tpl_img_getTag('Simple.Raw'));?>
+ </div>
+
+ <?php } ?>
+ </div>
+</div>
+</body>
+</html>
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/footer.html b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/footer.html
new file mode 100644
index 000000000..38aab7216
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/footer.html
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Example footer include
+ *
+ * This file shows you how to use the include hooks. However I recommend to
+ * create your own complete new template instead.
+ */
+
+$tgt = ($conf['target']['extern']) ? 'target="'.$conf['target']['extern'].'"' : '';
+?>
+
+<div class="footerinc">
+
+ <a <?php echo $tgt?> href="<?php echo DOKU_BASE; ?>feed.php" title="Recent changes RSS feed"><img src="<?php echo DOKU_TPL; ?>images/button-rss.png" width="80" height="15" alt="Recent changes RSS feed" /></a>
+
+ <?php
+ $lic = license_img('button');
+ if($lic){
+ ?>
+ <a <?php echo $tgt?> href="<?php echo $license[$conf['license']]['url']?>" rel="license" title="<?php echo $license[$conf['license']]['name']?>"><img src="<?php echo DOKU_BASE.$lic ?>" width="80" height="15" alt="" /></a>
+ <?php } ?>
+
+ <a <?php echo $tgt?> href="http://www.dokuwiki.org/donate" title="Donate"><img src="<?php echo DOKU_TPL; ?>images/button-donate.gif" alt="Donate" width="80" height="15" /></a>
+
+ <a <?php echo $tgt?> href="http://www.php.net" title="Powered by PHP"><img src="<?php echo DOKU_TPL; ?>images/button-php.gif" width="80" height="15" alt="Powered by PHP" /></a>
+
+ <a <?php echo $tgt?> href="http://validator.w3.org/check/referer" title="Valid XHTML 1.0"><img src="<?php echo DOKU_TPL; ?>images/button-xhtml.png" width="80" height="15" alt="Valid XHTML 1.0" /></a>
+
+ <a <?php echo $tgt?> href="http://jigsaw.w3.org/css-validator/check/referer?profile=css3" title="Valid CSS"><img src="<?php echo DOKU_TPL; ?>images/button-css.png" width="80" height="15" alt="Valid CSS" /></a>
+
+ <a <?php echo $tgt?> href="http://dokuwiki.org/" title="Driven by DokuWiki"><img src="<?php echo DOKU_TPL; ?>images/button-dw.png" width="80" height="15" alt="Driven by DokuWiki" /></a>
+
+<?php
+if ($conf['allowdebug']) {
+ echo '<!-- page made in '.round(delta_time(DOKU_START_TIME), 3).' seconds -->';
+}
+?>
+
+
+</div>
+<?php include(dirname(__FILE__).'/dwtb.html') ?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/bullet.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/bullet.gif
new file mode 100644
index 000000000..b43de48a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/bullet.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-cc.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-cc.gif
new file mode 100644
index 000000000..5861d637f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-cc.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-css.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-css.png
new file mode 100644
index 000000000..706325e1c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-css.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-donate.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-donate.gif
new file mode 100644
index 000000000..bba284e21
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-donate.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-dw.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-dw.png
new file mode 100644
index 000000000..39d5f56a9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-dw.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-php.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-php.gif
new file mode 100644
index 000000000..28f329aaa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-php.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-rss.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-rss.png
new file mode 100644
index 000000000..b036f7152
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-rss.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-xhtml.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-xhtml.png
new file mode 100644
index 000000000..ec686442c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-xhtml.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/buttonshadow.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/buttonshadow.png
new file mode 100644
index 000000000..f60be309f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/buttonshadow.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/closed.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/closed.gif
new file mode 100644
index 000000000..8414d4d69
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/closed.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/favicon.ico
new file mode 100644
index 000000000..8b9616abb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/favicon.ico
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/inputshadow.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/inputshadow.png
new file mode 100644
index 000000000..d286beb22
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/inputshadow.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/link_icon.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/link_icon.gif
new file mode 100644
index 000000000..815ccb1b1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/link_icon.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/mail_icon.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/mail_icon.gif
new file mode 100644
index 000000000..50a87a9a0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/mail_icon.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/open.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/open.gif
new file mode 100644
index 000000000..f5d5c7e56
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/open.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/sidebar-border.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/sidebar-border.gif
new file mode 100644
index 000000000..fc4b78e8c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/sidebar-border.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/tocdot2.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/tocdot2.gif
new file mode 100644
index 000000000..3d39c2e73
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/tocdot2.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/windows.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/windows.gif
new file mode 100644
index 000000000..4f12acce1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/windows.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/layout.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/layout.css
new file mode 100644
index 000000000..ca4b52756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/layout.css
@@ -0,0 +1,79 @@
+/**
+ * Tableless Layout for default template
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author moraes <moraes@tipos.com.br>
+ */
+
+/* -------------- top row --------------- */
+div.dokuwiki .header {
+ padding: 3px 0 0 2px;
+}
+
+div.dokuwiki .pagename {
+ float: left;
+ font-size: 200%;
+ font-weight: bolder;
+ color: __background_alt__;
+ text-align: left;
+ vertical-align: middle;
+}
+
+div.dokuwiki .pagename a {
+ color: __extern__ !important;
+ text-decoration: none !important;
+}
+
+div.dokuwiki .logo {
+ float: right;
+ font-size: 220%;
+ font-weight: bolder;
+ text-align: right;
+ vertical-align: middle;
+}
+
+div.dokuwiki .logo a {
+ color: __background_alt__ !important;
+ text-decoration: none !important;
+ font-variant: small-caps;
+ letter-spacing: 2pt;
+}
+
+/* --------------- top and bottom bar ---------------- */
+div.dokuwiki .bar {
+ border-top: 1px solid __border__;
+ border-bottom: 1px solid __border__;
+ background: __background_alt__;
+ padding: 0.1em 0.15em;
+ clear: both;
+}
+
+div.dokuwiki .bar-left {
+ float: left;
+}
+
+div.dokuwiki .bar-right {
+ float: right;
+ text-align: right;
+}
+
+div.dokuwiki #bar__bottom {
+ margin-bottom:3px;
+}
+
+/* ------------- File Metadata ----------------------- */
+
+div.dokuwiki div.meta {
+ clear: both;
+ margin-top: 1em;
+ color: __text_alt__;
+ font-size: 70%;
+}
+
+div.dokuwiki div.meta div.user {
+ float: left;
+}
+
+div.dokuwiki div.meta div.doc {
+ text-align: right;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/main.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/main.php
new file mode 100644
index 000000000..11c4ea967
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/main.php
@@ -0,0 +1,69 @@
+<?php
+/**
+ * DokuWiki Default Template
+ *
+ * This is the template you need to change for the overall look
+ * of DokuWiki.
+ *
+ * You should leave the doctype at the very top - It should
+ * always be the very first line of a document.
+ *
+ * @link http://dokuwiki.org/templates
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+// must be run from within DokuWiki
+if (!defined('DOKU_INC')) die();
+
+
+$sidebar_inline = get_input("inline_sidebar");
+$page_inline = get_input("inline_page");
+
+if (empty($sidebar_inline)) {
+ob_start();
+include(dirname(__FILE__).'/main_index.php');
+$content = ob_get_clean();
+}
+
+if (empty($page_inline)) {
+// include functions that provide sidebar functionality
+@require_once(dirname(__FILE__).'/tplfn_sidebar.php');
+ob_start();
+include(dirname(__FILE__).'/sidebar.php');
+$sidebar = ob_get_clean();
+}
+
+if (empty($sidebar_inline) && empty($page_inline)) {
+
+ elgg_push_breadcrumb(elgg_echo('dokuwiki'), 'dokuwiki/all');
+ elgg_push_breadcrumb(sprintf(elgg_echo('dokuwiki:wikifrom'), elgg_get_page_owner_entity()->name));
+
+ $title = sprintf(elgg_echo('dokuwiki:wikifrom'), elgg_get_page_owner_entity()->name);
+
+ $sidebar = elgg_view_module('aside', elgg_echo('dokuwiki:sidebar'), $sidebar);
+
+ $body = elgg_view_layout('content', array(
+ 'filter' => '',
+ 'content' => $content,
+ 'title' => $title,
+ 'sidebar' => $sidebar,
+ ));
+
+ echo elgg_view_page($title, $body);
+}
+else {
+ $all_link = elgg_get_site_url().'dokuwiki/'.elgg_get_page_owner_guid();
+ $all_text = elgg_echo('link:view:all');
+ $all_link = "<a href=\"$all_link\">$all_text</a>";
+
+ echo elgg_view('groups/profile/module', array(
+ 'title' => $content ? elgg_echo('dokuwiki:group') : elgg_echo('dokuwiki:sidebar'),
+ 'content' => $content . $sidebar,
+ 'all_link' => $all_link,
+ ));
+}
+
+
+//echo $content;
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/main_index.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/main_index.php
new file mode 100644
index 000000000..31a7ebafb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/main_index.php
@@ -0,0 +1,135 @@
+<?php
+/**
+ * DokuWiki Sidebar Template
+ * This template is the Dokuwiki Default Template with
+ * a configurable sidebar facility.
+ *
+ * @link http://wiki.jalakai.co.uk/dokuwiki
+ * @link http://dokuwiki.org/template/sidebar
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ * @date 2009-01-27
+ *
+ * Default template by ...
+ *
+ * @link http://dokuwiki.org/templates
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+// must be run from within DokuWiki
+if (!defined('DOKU_INC')) die();
+
+$page_inline = get_input("inline_page");
+// include functions that provide sidebar functionality
+//@require_once(dirname(__FILE__).'/tplfn_sidebar.php');
+?>
+ <?php //tpl_metaheaders()?>
+
+ <?php /*old includehook @include(dirname(__FILE__).'/meta.html') */ ?>
+
+<?php /*old includehook @include(dirname(__FILE__).'/topheader.html') */ ?>
+<div class="dokuwiki">
+ <?php html_msgarea()?>
+
+ <div class="stylehead">
+
+ <?php if (empty($page_inline)) { ?>
+ <div class="header">
+ <div class="pagename">
+ [[<?php tpl_link(wl($ID,'do=backlink'),tpl_pagetitle($ID,true),'title="'.$lang['btn_backlink'].'"')?>]]
+ </div>
+ <div class="logo">
+ <?php tpl_link(wl(),$conf['title'],'name="dokuwiki__top" id="dokuwiki__top" accesskey="h" title="[H]"')?>
+ </div>
+
+ <div class="clearer"></div>
+ </div>
+ <?php }?>
+
+ <?php /*old includehook*/ @include(dirname(__FILE__).'/header.html')?>
+
+ <?php if (empty($page_inline)) { ?>
+ <div class="bar" id="bar__top">
+ <div class="bar-left" id="bar__topleft">
+ <?php tpl_button('edit')?>
+ <?php tpl_button('history')?>
+ </div>
+
+ <div class="bar-right" id="bar__topright">
+ <?php tpl_button('recent')?>
+ <?php tpl_searchform()?>&nbsp;
+ </div>
+
+ <div class="clearer"></div>
+ </div>
+ <?php } ?>
+
+ <?php if($conf['breadcrumbs']){?>
+ <div class="breadcrumbs">
+ <?php tpl_breadcrumbs()?>
+ <?php //tpl_youarehere() //(some people prefer this)?>
+ </div>
+ <?php }?>
+
+ <?php if($conf['youarehere']){?>
+ <div class="breadcrumbs">
+ <?php tpl_youarehere() ?>
+ </div>
+ <?php }?>
+
+ </div>
+ <?php flush()?>
+
+ <?php /*old includehook*/ @include(dirname(__FILE__).'/pageheader.html')?>
+
+ <div class="page">
+ <!-- wikipage start -->
+ <?php tpl_content()?>
+ <!-- wikipage stop -->
+ </div>
+
+ <?php if (empty($page_inline)) { ?>
+ <div class="clearer">&nbsp;</div>
+
+ <?php flush()?>
+
+ <div class="stylefoot">
+
+ <div class="meta">
+ <div class="user">
+ <?php tpl_userinfo()?>
+ </div>
+ <div class="doc">
+ <?php tpl_pageinfo()?>
+ </div>
+ </div>
+
+ <?php /*old includehook*/ @include(dirname(__FILE__).'/pagefooter.html')?>
+
+ </div>
+ <?php } ?>
+ <div class="bar" id="bar__bottom">
+ <div class="bar-left" id="bar__bottomleft">
+ <?php tpl_button('edit')?>
+ <?php tpl_button('history')?>
+ </div>
+ <div class="bar-right" id="bar__bottomright">
+ <?php tpl_button('subscribe')?>
+ <?php tpl_button('subscribens')?>
+ <?php tpl_button('admin')?>
+ <?php tpl_button('profile')?>
+ <?php tpl_button('login')?>
+ <?php tpl_button('index')?>
+ <?php tpl_button('top')?>&nbsp;
+ </div>
+ <div class="clearer"></div>
+ </div>
+ <?php if (empty($page_inline)) { ?>
+
+ </div>
+ <?php } ?>
+
+ <?php/* tpl_license(false);*/?>
+
+<?php /*old includehook @include(dirname(__FILE__).'/footer.html')*/ ?>
+
+<div class="no"><?php /* provide DokuWiki housekeeping, required in all templates */ tpl_indexerWebBug()?></div>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/media.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/media.css
new file mode 100644
index 000000000..27d0b1d33
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/media.css
@@ -0,0 +1,205 @@
+/**
+ * The CSS in here cotrols the appearance of the media manager
+ */
+
+#media__manager {
+ height: 100%;
+ overflow: hidden;
+}
+
+#media__left {
+ width: 30%;
+ border-right: solid 1px __border__;
+
+ height: 100%;
+ overflow: auto;
+ position: absolute;
+ left: 0;
+}
+
+#media__right {
+ width: 69.7%;
+
+ height: 100%;
+ overflow: auto;
+ position: absolute;
+ right: 0;
+}
+
+#media__manager h1 {
+ margin: 0;
+ padding: 0;
+ margin-bottom: 0.5em;
+}
+
+/* --- Tree formatting --- */
+
+#media__tree img {
+ float:left;
+ padding: 0.5em 0.3em 0 0;
+}
+
+#media__tree ul {
+ list-style-type: none;
+ list-style-image: none;
+ margin-left: 1.5em;
+}
+
+#media__tree li {
+ clear: left;
+ list-style-type: none;
+ list-style-image: none;
+}
+*+html #media__tree li,
+* html #media__tree li {
+ border: 1px solid __background__;
+}/* I don't understand this, but this fixes a style bug in IE;
+it's dirty, so any "real" fixes are welcome */
+
+/* --- options --- */
+
+#media__opts {
+ padding-left: 1em;
+ margin-bottom: 0.5em;
+}
+
+#media__opts input {
+ float: left;
+ display: block;
+ margin-top: 4px;
+ position: absolute;
+}
+*+html #media__opts input,
+* html #media__opts input {
+ position: static;
+}
+
+#media__opts label {
+ display: block;
+ float: left;
+ margin-left: 20px;
+ margin-bottom: 4px;
+}
+*+html #media__opts label,
+* html #media__opts label {
+ margin-left: 10px;
+}
+
+#media__opts br {
+ clear: left;
+}
+
+/* --- file list --- */
+
+#media__content img.load {
+ margin: 1em auto;
+}
+
+#media__content #scroll__here {
+ border: 1px dashed __border__;
+}
+
+#media__content .odd {
+ background-color: __background_other__;
+ padding: 0.4em;
+}
+
+#media__content .even {
+ padding: 0.4em;
+}
+
+#media__content a.mediafile {
+ margin-right: 1.5em;
+ font-weight: bold;
+}
+
+#media__content div.detail {
+ padding: 0.3em 0 0.3em 2em;
+}
+
+#media__content div.detail div.thumb {
+ float: left;
+ width: 130px;
+ text-align: center;
+ margin-right: 0.4em;
+}
+
+
+#media__content img.btn {
+ vertical-align: text-bottom;
+}
+
+#media__content div.example {
+ color: __text_neu__;
+ margin-left: 1em;
+}
+
+/* --- upload form --- */
+
+#media__content div.upload {
+ font-size: 90%;
+ padding: 0 0.5em 0.5em 0.5em;
+}
+
+#media__content form#dw__upload,
+#media__content div#dw__flashupload {
+ display: block;
+ border-bottom: solid 1px __border__;
+ padding: 0 0.5em 1em 0.5em;
+}
+#media__content form#dw__upload fieldset {
+ padding: 0;
+ margin: 0;
+ border: none;
+ width: auto;
+}
+#media__content form#dw__upload p {
+ text-align: left;
+ padding: 0.25em 0;
+ margin: 0;
+ line-height: 1.0em;
+}
+#media__content form#dw__upload label.check {
+ float: none;
+ width: auto;
+ margin-left: 11.5em;
+}
+
+/* --- meta edit form --- */
+
+#media__content form.meta {
+ display: block;
+ padding: 0 0 1em 0;
+}
+
+#media__content form.meta label {
+ display: block;
+ width: 25%;
+ float: left;
+ font-weight: bold;
+ margin-left: 1em;
+ clear: left;
+}
+
+#media__content form.meta .edit {
+ font: 100% "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif;
+ float: left;
+ width: 70%;
+ padding-right: 0;
+ padding-left: 0.2em;
+ margin: 2px;
+}
+
+#media__content form.meta textarea.edit {
+ height: 8em;
+}
+
+#media__content form.meta div.metafield {
+ clear: left;
+}
+
+#media__content form.meta div.buttons {
+ clear: left;
+ margin-left: 20%;
+ padding-left: 1em;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/media.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/media.php
new file mode 100644
index 000000000..c464597bb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/media.php
@@ -0,0 +1,54 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<?php
+/**
+ * DokuWiki Default Template
+ *
+ * This is the template for the media selection popup.
+ *
+ * You should leave the doctype at the very top - It should
+ * always be the very first line of a document.
+ *
+ * @link http://wiki.splitbrain.org/wiki:tpl:templates
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $conf['lang']?>" lang="<?php echo $conf['lang']?>" dir="ltr">
+<head>
+ <title><?php echo hsc($lang['mediaselect'])?> [<?php echo hsc($conf['title'])?>]</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+
+ <?php tpl_metaheaders()?>
+
+ <link rel="shortcut icon" href="<?php echo DOKU_TPL?>images/favicon.ico" />
+
+</head>
+
+<body>
+<div class="dokuwiki">
+ <?php html_msgarea()?>
+
+ <h1><?php echo hsc($lang['mediaselect'])?> <code><?php echo hsc($NS)?></code></h1>
+
+ <div class="mediaselect">
+
+ <div class="mediaselect-left">
+ <strong><a href="<?php echo DOKU_BASE?>lib/exe/media.php?ns="><?php echo hsc($lang['namespaces'])?></a></strong>
+
+ <?php tpl_medianamespaces()?>
+ </div>
+
+ <div class="mediaselect-right">
+ <?php tpl_mediafilelist()?>
+
+ <div class="uploadform">
+ <?php tpl_mediauploadform()?>
+ </div>
+ </div>
+
+ </div>
+
+</div>
+</body>
+</html>
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediaedit.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediaedit.php
new file mode 100644
index 000000000..66d40ad5e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediaedit.php
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<?php
+/**
+ * DokuWiki Default Template
+ *
+ * This is the template for editing image meta data.
+ * It is displayed in the media popup.
+ *
+ * You should leave the doctype at the very top - It should
+ * always be the very first line of a document.
+ *
+ * @link http://wiki.splitbrain.org/wiki:tpl:templates
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $conf['lang']?>" lang="<?php echo $conf['lang']?>" dir="ltr">
+<head>
+ <title><?php echo hsc($lang['mediaselect'])?> [<?php echo hsc($conf['title'])?>]</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+
+ <?php tpl_metaheaders()?>
+
+ <link rel="shortcut icon" href="<?php echo DOKU_TPL?>images/favicon.ico" />
+</head>
+
+<body>
+<div class="dokuwiki">
+ <?php html_msgarea()?>
+
+ <h1><?php echo hsc($lang['metaedit'])?> <code><?php echo hsc(noNS($IMG))?></code></h1>
+
+ <div class="mediaedit">
+ <?php/* everything in meta array is tried to save and read */?>
+
+ <div class="data">
+ <form action="<?php echo DOKU_BASE?>lib/exe/media.php" accept-charset="utf-8" method="post">
+ <input type="hidden" name="edit" value="<?php echo hsc($IMG)?>" />
+ <input type="hidden" name="save" value="1" />
+
+ <label class="block" for="img__title"><?php echo $lang['img_title']?></label>
+ <input type="text" name="meta[Iptc.Headline]" id="img__title" class="edit"
+ value="<?php echo hsc(tpl_img_getTag('IPTC.Headline'))?>" /><br />
+
+ <label class="block" for="img__caption"><?php echo $lang['img_caption']?></label>
+ <textarea name="meta[Iptc.Caption]" id="img__caption" class="edit" rows="5"><?php
+ echo hsc(tpl_img_getTag(array('IPTC.Caption',
+ 'EXIF.UserComment',
+ 'EXIF.TIFFImageDescription',
+ 'EXIF.TIFFUserComment')));
+ ?></textarea><br />
+
+ <label class="block" for="img__artist"><?php echo $lang['img_artist']?></label>
+ <input type="text" name="meta[Iptc.Byline]" id="img__artist" class="edit"
+ value="<?php echo hsc(tpl_img_getTag(array('Iptc.Byline',
+ 'Exif.TIFFArtist',
+ 'Exif.Artist',
+ 'Iptc.Credit')))?>" /><br />
+
+ <label class="block" for="img__copy"><?php echo $lang['img_copyr']?></label>
+ <input type="text" name="meta[Iptc.CopyrightNotice]" id="img__copy" class="edit"
+ value="<?php echo hsc(tpl_img_getTag(array('Iptc.CopyrightNotice','Exif.TIFFCopyright','Exif.Copyright')))?>" /><br />
+
+
+ <label class="block" for="img__keywords"><?php echo $lang['img_keywords']?></label>
+ <textarea name="meta[Iptc.Keywords]" id="img__keywords" class="edit"><?php
+ echo hsc(tpl_img_getTag(array('IPTC.Keywords',
+ 'EXIF.Category')));
+ ?></textarea><br />
+
+
+ <input type="submit" value="<?php echo $lang['btn_save']?>" title="ALT+S"
+ accesskey="s" class="button" />
+
+ </form>
+ </div>
+
+
+ <div class="footer">
+ <hr>
+ <?php tpl_button('backtomedia')?>
+ </div>
+ </div>
+
+</div>
+</body>
+</html>
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediamanager.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediamanager.php
new file mode 100644
index 000000000..7b7fe8675
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediamanager.php
@@ -0,0 +1,44 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<?php
+/**
+ * DokuWiki Default Template
+ *
+ * This is the template for the media manager popup
+ *
+ * You should leave the doctype at the very top - It should
+ * always be the very first line of a document.
+ *
+ * @link http://dokuwiki.org/templates
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $conf['lang']?>" lang="<?php echo $conf['lang']?>" dir="ltr">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>
+ <?php echo hsc($lang['mediaselect'])?>
+ [<?php echo strip_tags($conf['title'])?>]
+ </title>
+ <?php tpl_metaheaders()?>
+ <link rel="shortcut icon" href="<?php echo DOKU_TPL?>images/favicon.ico" />
+</head>
+
+<body>
+<div id="media__manager" class="dokuwiki">
+ <div id="media__left">
+ <?php html_msgarea()?>
+ <h1><?php echo hsc($lang['mediaselect'])?></h1>
+
+ <?php /* keep the id! additional elements are inserted via JS here */?>
+ <div id="media__opts"></div>
+
+ <?php tpl_mediaTree() ?>
+ </div>
+
+ <div id="media__right">
+ <?php tpl_mediaContent() ?>
+ </div>
+</div>
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediaref.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediaref.php
new file mode 100644
index 000000000..4651b5667
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediaref.php
@@ -0,0 +1,50 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<?php
+/**
+ * DokuWiki Default Template
+ *
+ * This is the template for displaying references to a media file.
+ * It is displayed in the media popup.
+ *
+ * You should leave the doctype at the very top - It should
+ * always be the very first line of a document.
+ *
+ * @link http://wiki.splitbrain.org/wiki:tpl:templates
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $conf['lang']?>" lang="<?php echo $conf['lang']?>" dir="ltr">
+<head>
+ <title><?php echo hsc($lang['mediaselect'])?> [<?php echo hsc($conf['title'])?>]</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+
+ <?php tpl_metaheaders()?>
+
+ <link rel="shortcut icon" href="<?php echo DOKU_TPL?>images/favicon.ico" />
+
+</head>
+
+<body>
+<div class="dokuwiki">
+ <?php html_msgarea()?>
+
+ <h1><?php echo hsc($lang['reference'])?> <code><?php echo hsc(noNS($DEL))?></code></h1>
+
+ <div class="mediaref">
+ <div class="mediaref_head">
+ <p><?php echo hsc($lang['ref_inuse'])?></p>
+ </div>
+
+ <?php tpl_showreferences($mediareferences)?>
+
+ <div class="mediaref_footer">
+ <hr>
+ <?php tpl_button('backtomedia')?>
+ </div>
+ </div>
+
+</div>
+</body>
+</html>
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/print.css
new file mode 100644
index 000000000..0491a7ba0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/print.css
@@ -0,0 +1,238 @@
+
+body {
+ font: 10pt "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif;
+ background-color: White;
+ color: Black;
+}
+
+table {
+ font-size: 100%;
+ padding:0;
+ margin:0;
+}
+
+tr,td,th {padding:0; margin:0;}
+
+img {border:0}
+
+a {
+ color:#000000;
+ text-decoration:none;
+ background: none !important;
+}
+
+
+div.meta {
+ clear:both;
+ margin-top: 1em;
+ font-size:70%;
+ text-align:right;
+}
+
+
+div.notify,
+div.info,
+div.success,
+div.error,
+div.breadcrumbs,
+div.secedit {
+ display:none;
+}
+
+/* --------------------- Text formating -------------------------------- */
+
+/* external link */
+a.urlextern:after {
+ content: " [" attr(href) "]";
+ font-size: 90%;
+}
+
+/* interwiki link */
+a.interwiki:after {
+ content: " [" attr(href) "]";
+ font-size: 90%;
+}
+
+/* email link */
+a.mail:after {
+ content: " [" attr(href) "]";
+ font-size: 90%;
+}
+
+/* existing wikilink */
+a.wikilink1 {text-decoration:underline }
+
+/* the document */
+div.page {
+ text-align: justify;
+}
+
+/* general headline setup */
+h1, h2, h3, h4, h5 {
+ color: Black;
+ background-color: transparent;
+ font-family: "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif;
+ font-size: 100%;
+ font-weight: normal;
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ margin-bottom: 1em;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0.5em;
+ padding-bottom: 0;
+ border-bottom: 1px solid #000000;
+ clear:left;
+}
+
+/* special headlines */
+h1 {font-size: 160%; font-weight: bold;}
+h2 {font-size: 150%; }
+h3 {font-size: 140%; border-bottom: none; }
+h4 {font-size: 120%; border-bottom: none; }
+h5 {font-size: 100%; border-bottom: none; }
+
+/* embedded images */
+img.media {
+ margin: 3px;
+}
+
+img.medialeft {
+ border: 0;
+ float: left;
+ margin: 0 1.5em 0 0;
+}
+
+img.mediaright {
+ border: 0;
+ float: right;
+ margin: 0 0 0 1.5em;
+}
+
+/* unordered lists */
+ul {
+ line-height: 1.5em;
+ list-style-type: square;
+ margin: 0 0 1em 3.5em;
+ padding: 0;
+}
+
+/* ordered lists */
+ol {
+ line-height: 1.5em;
+ margin: 0 0 1em 3.5em;
+ padding: 0;
+ font-weight: normal;
+}
+
+div.dokuwiki li ul {
+ margin-bottom: 0;
+}
+div.dokuwiki li ol {
+ margin-bottom: 0;
+}
+
+div.dokuwiki ol {list-style-type: decimal}
+div.dokuwiki ol ol {list-style-type: upper-roman}
+div.dokuwiki ol ol ol {list-style-type: lower-alpha}
+div.dokuwiki ol ol ol ol {list-style-type: lower-greek}
+
+/* the list items overriding the ol definition */
+span.li {
+ font-weight: normal;
+}
+
+/* code blocks by indention */
+pre.pre {
+ font-size: 8pt;
+ padding: 0.5em;
+ border: 1px dashed #000000;
+ color: Black;
+ overflow: visible;
+}
+
+/* code blocks by code tag */
+pre.code {
+ font-size: 8pt;
+ padding: 0.5em;
+ border: 1px dashed #000000;
+ color: Black;
+ overflow: visible;
+}
+
+/* inline code words */
+code {
+ font-size: 120%;
+}
+
+/* code blocks by file tag */
+pre.file {
+ font-size: 8pt;
+ padding: 0.5em;
+ border: 1px dotted #000000;
+ color: Black;
+ overflow: visible;
+}
+
+/* footnotes */
+div.footnotes{
+ clear:both;
+ border-top: 1px solid #000000;
+ padding-left: 1em;
+ margin-top: 1em;
+}
+
+div.fn{
+ font-size:90%;
+}
+
+a.fn_top{
+ vertical-align:super;
+ font-size:80%;
+}
+
+a.fn_bot{
+ vertical-align:super;
+ font-size:80%;
+ font-weight:bold;
+}
+
+acronym{
+ border: 0;
+}
+
+/* ---------- inline tables ------------------- */
+
+table.inline {
+ font-size: 80%;
+ background-color: #ffffff;
+ border-spacing: 0px;
+ border-collapse: collapse;
+}
+
+table.inline th {
+ padding: 3px;
+ border: 1px solid #000000;
+ border-bottom: 2px solid #000000;
+}
+
+table.inline td {
+ padding: 3px;
+ border: 1px solid #000000;
+}
+
+.leftalign{
+ text-align: left;
+}
+
+.centeralign{
+ text-align: center;
+}
+
+.rightalign{
+ text-align: right;
+}
+
+.toc, .footerinc, .header, .bar, .user {display:none}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/rtl.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/rtl.css
new file mode 100644
index 000000000..4678c3059
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/rtl.css
@@ -0,0 +1,119 @@
+/**
+ * Layout and dedsign corrections for right-to-left languages
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Dotan Kamber <kamberd@yahoo.com>
+ */
+
+.bar-left {
+ float: right;
+ text-align: right;
+}
+
+.bar-right {
+ float: left;
+ text-align: left;
+}
+
+.pagename {
+ float: right;
+ text-align: right;
+}
+
+.logo {
+ float: left;
+ text-align: left;
+}
+
+label {
+ text-align: left;
+}
+
+label.simple {
+ text-align: right;
+}
+
+div.meta div.user {
+ float: right
+}
+
+div.meta div.doc {
+ text-align: left;
+}
+
+/* ------------------ Design corrections --------------------------------- */
+
+div.dokuwiki ul,
+div.dokuwiki ol {
+ margin: 0.5em 1.5em 0.5em 0;
+}
+
+div.dokuwiki a.urlextern,
+div.dokuwiki a.interwiki,
+div.dokuwiki a.windows,
+div.dokuwiki a.mail,
+div.dokuwiki a.mail.JSnocheck {
+ /* should work but doesn't - so we just disable icons here*/
+ /*
+ background-position: right 1px;
+ padding-right: 16px;
+ */
+ background-image: none !important;
+ padding: 0px 0px 0px 0px;
+}
+
+div.dokuwiki div.secedit input.button {
+ float: left;
+}
+
+/* headlines */
+div.dokuwiki h1, div.dokuwiki h2, div.dokuwiki h3, div.dokuwiki h4, div.dokuwiki h5 {
+ clear: right;
+}
+
+/* special headlines */
+div.dokuwiki h1 {margin-left: 0px; margin-right: 0px;}
+div.dokuwiki h2 {margin-left: 0px; margin-right: 20px;}
+div.dokuwiki h3 {margin-left: 0px; margin-right: 40px;}
+div.dokuwiki h4 {margin-left: 0px; margin-right: 60px;}
+div.dokuwiki h5 {margin-left: 0px; margin-right: 80px;}
+
+/* indent different sections */
+div.dokuwiki div.level1 {margin-left: 0px; margin-right: 3px;}
+div.dokuwiki div.level2 {margin-left: 0px; margin-right: 23px;}
+div.dokuwiki div.level3 {margin-left: 0px; margin-right: 43px;}
+div.dokuwiki div.level4 {margin-left: 0px; margin-right: 63px;}
+div.dokuwiki div.level5 {margin-left: 0px; margin-right: 83px;}
+
+/* TOC control */
+div.dokuwiki div.toc {
+ float: left;
+}
+
+div.dokuwiki div.tocheader {
+ text-align: right;
+}
+
+div.dokuwiki #toc__inside {
+ text-align: right;
+}
+
+div.dokuwiki ul.toc {
+ padding: 0;
+ padding-right: 1em;
+}
+
+div.dokuwiki ul.toc li {
+ background-position: right 0.6em;
+ padding-right:0.4em;
+ direction: rtl;
+}
+
+div.dokuwiki ul.toc li.clear {
+ padding-right:0.4em;
+}
+
+div.dokuwiki pre {
+ text-align: left;
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar.css
new file mode 100644
index 000000000..5af3c95cb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar.css
@@ -0,0 +1,189 @@
+/**
+ * Extra styles for sidebar template
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+
+/* dokuwiki containers & styles */
+
+/* sidebar orientation and position */
+#sidebar {
+ width:20%;
+ margin:0;
+ padding:0;
+ position: relative;
+}
+
+#sidebartop {
+ position: absolute;
+ top: -1.2em;
+ width: 100%;
+ height: 1.2em;
+ background: __background_neu__;
+}
+
+.sidebar_inside_left #sidebar {
+ float:left;
+}
+
+.sidebar_inside_right #sidebar {
+ float:right;
+}
+
+.sidebar_inside_left .dokuwiki div.breadcrumbs {
+ float: right;
+ width: 78%;
+ padding: 0 1% 0 0.9%;
+}
+
+.sidebar_inside_left .dokuwiki .page, .sidebar_inside_left .dokuwiki .meta {
+ float:right;
+ width:77%; /* also see IE Win fix below */
+ margin-right: 1%;
+ margin-left:0;
+}
+
+.sidebar_inside_right .dokuwiki .page, .sidebar_inside_right .dokuwiki .meta, .sidebar_inside_right .dokuwiki div.breadcrumbs {
+ float:left;
+ width:77%;
+ margin-left: 1%;
+ margin-right: 0;
+}
+
+.sidebar_outside_left #sidebar {
+ position:absolute;
+ top:0;
+ left:0;
+}
+
+.sidebar_outside_right #sidebar {
+ position:absolute;
+ top:0;
+ right:0;
+}
+
+.sidebar_outside_left .dokuwiki {
+ padding-left:21%;
+}
+
+.sidebar_outside_right .dokuwiki {
+ padding-right:21%;
+}
+
+.sidebar_outside_left .footerinc {
+ padding-left: 21%;
+}
+
+.sidebar_outside_right .footerinc {
+ padding-right: 21%;
+}
+
+/* sidebar presentation */
+/* the following three styles use a faux-column image to place a separating line
+ between the sidebar and dokuwiku */
+.sidebar_outside_left .dokuwiki, .sidebar_inside_left .dokuwiki {
+ background: url(images/sidebar-border.gif) repeat-y 20%;
+}
+
+.sidebar_outside_right .dokuwiki, .sidebar_inside_right .dokuwiki {
+ background: url(images/sidebar-border.gif) repeat-y 80%;
+}
+
+/* hide the line where it passes through .stylehead */
+.stylehead {
+}
+
+/* sidebar contents */
+#sidebar {
+ font-size:10px;
+}
+
+#sidebar a {
+ color: __existing__;
+}
+
+#sidebar a.wikilink2 {
+ color: __text_neu__;
+}
+
+#sidebar a.wikilink2:hover {
+ text-decoration:none;
+ cursor:default;
+}
+
+#sidebar h1 {
+ font-size:140%;
+ margin-left: 0px;
+ padding-left: 2px;
+ font-weight:bold;
+ padding-bottom:0;
+ background-color: __background_alt__;
+}
+#sidebar h2 {
+ font-size:120%;
+ margin-left: 4px;
+ font-weight:bold;
+ padding-bottom:0;
+}
+#sidebar h3 {
+ font-size:120%;
+ margin-left: 8px;
+ font-weight:normal;
+ padding-bottom:0;
+}
+#sidebar h4 {
+ font-size:100%;
+ margin-left: 12px;
+ font-weight:bold;
+ padding-bottom:0;
+}
+#sidebar h5 {
+ font-size:100%;
+ margin-left: 16px;
+ font-weight:normal;
+ padding-bottom:0;
+}
+#sidebar .toc {
+ display:none;
+}
+
+#sidebar_content .toc {
+ display:none;
+}
+#sidebar .secedit {
+}
+
+/* reduced section indentation */
+#sidebar div.level1 {margin-left: 2px;}
+#sidebar div.level2 {margin-left: 6px;}
+#sidebar div.level3 {margin-left: 10px;}
+#sidebar div.level4 {margin-left: 14px;}
+#sidebar div.level5 {margin-left: 18px;}
+
+/* IE fixes (hide from IE Mac) \*/
+
+* html .page .toc {height:1px} /* General Dokuwiki fix. IE needs this to always display TOC contents \*/
+* html pre {width:95%;} /* General Dokuwiki fix - very important for Sidebar. IE needs this to get the overflow:auto style to kick in \*/
+* html .stylehead {height:1px;} /* Get IE in hasLayout mode to ensure the background covers the whole element \*/
+
+* html .sidebar_inside_left .page, * html .sidebar_inside_right .page,
+* html .sidebar_inside_left .meta, * html .sidebar_inside_right .meta {
+ width: 77%; /* IE needs extra gap to ensure #sidebar & .page float next to each other \*/
+ overflow-x: auto; /* IE proprietary property to prevent wide images in wiki page forcing sidebar down below wiki page \*/
+ /* 'overflow-x:auto;' maybe replaced by 'overflow:auto;' to ensure template passes w3c validation \*/
+}
+
+/* (end IE Mac hiding) */
+
+/* duplicate standard DW styles with increased specificity to counter some sidebar styles */
+.sidebar_outside_left .insitu-footnote, .sidebar_inside_left .insitu-footnote {
+ background-color: __background_other__;
+}
+/* counteract some inappropriate DW styling */
+.sidebar div.dokuwiki #bar__bottom {
+ margin-bottom: 0;
+}
+.sidebar div.dokuwiki p.license {
+ background-color: __background_other__;
+ padding-top: 3px;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar.php
new file mode 100644
index 000000000..b5c157b39
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar.php
@@ -0,0 +1,9 @@
+<div id="owner_block">
+<div id="sidebartop"> </div>
+<!--<div id="sidebartop"> <?php tpl_sidebar_editbtn(); ?></div>-->
+ <div id="sidebar_content">
+ <?php tpl_sidebar_content(); ?>
+ </div>
+ <div class="clearer">&nbsp;</div>
+</div>
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar_print.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar_print.css
new file mode 100644
index 000000000..42332062b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar_print.css
@@ -0,0 +1,9 @@
+/**
+ * Extra styles for sidebar template
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+
+/* prevent the sidebar being included when printing wiki pages */
+ #sidebar {display:none;}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/style.ini b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/style.ini
new file mode 100644
index 000000000..291cfd259
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/style.ini
@@ -0,0 +1,67 @@
+; Please see http://www.php.net/manual/en/function.parse-ini-file.php
+; for limitations of the ini format used here
+
+; Define the stylesheets your template uses here. The second value
+; defines for which output media the style should be loaded. Currently
+; print, screen and rtl are supported. rtl styles are loaded additionally
+; to screen styles if a right-to-left language is selected (eg. hebrew)
+[stylesheets]
+layout.css = screen
+design.css = screen
+style.css = screen
+
+media.css = screen
+
+rtl.css = rtl
+print.css = print
+sidebar.css = screen
+sidebar_print.css = print
+
+; This section is used to configure some placeholder values used in
+; the stylesheets. Changing this file is the simplest method to
+; give your wiki a new look.
+[replacements]
+
+;--------------------------------------------------------------------------
+;------ guaranteed dokuwiki color placeholders that every plugin can use
+; main text and background colors
+__text__ = "#000"
+__background__ = "#fff"
+; alternative text and background colors
+__text_alt__ = "#638c9c"
+__background_alt__ = "#dee7ec"
+; neutral text and background colors
+__text_neu__ = "#666"
+__background_neu__ = "#f5f5f5"
+; border color
+__border__ = "#8cacbb"
+;--------------------------------------------------------------------------
+
+; other text and background colors
+__text_other__ = "#ccc"
+__background_other__ = "#f7f9fa"
+
+; these are used for links
+__extern__ = "#436976"
+__existing__ = "#090"
+__missing__ = "#f30"
+
+; highlighting search snippets
+__highlight__ = "#ff9"
+
+
+;--------------------------------------------------------------------------
+;------ for keeping old templates and plugins compatible to the old pattern
+; (to be deleted at the next or after next release)
+__white__ = "#fff"
+__lightgray__ = "#f5f5f5"
+__mediumgray__ = "#ccc"
+__darkgray__ = "#666"
+__black__ = "#000"
+
+; these are the shades of blue
+__lighter__ = "#f7f9fa"
+__light__ = "#eef3f8"
+__medium__ = "#dee7ec"
+__dark__ = "#8cacbb"
+__darker__ = "#638c9c"
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/tplfn_sidebar.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/tplfn_sidebar.php
new file mode 100644
index 000000000..6c378c385
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/tplfn_sidebar.php
@@ -0,0 +1,98 @@
+<?php
+/*
+ * Provide navigation sidebar functionality to Dokuwiki Templates
+ *
+ * This is not currently part of the official Dokuwiki release
+ *
+ * @link http://wiki.jalakai.co.uk/dokuwiki/doku.php?id=tutorials:dev:navigation_sidebar
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+
+// sidebar configuration settings
+tpl_loadConfig();
+
+// determine the sidebar class
+$sidebar_class = "sidebar sidebar_".tpl_getConf('layout').'_'.tpl_getConf('orientation');
+
+// recursive function to establish best sidebar file to be used
+function getSidebarFN($ns, $file) {
+
+ // check for wiki page = $ns:$file (or $file where no namespace)
+ $nsFile = ($ns) ? "$ns:$file" : $file;
+ if (file_exists(wikiFN($nsFile)) && auth_quickaclcheck($nsFile)) return $nsFile;
+
+// remove deepest namespace level and call function recursively
+
+ // no namespace left, exit with no file found
+ if (!$ns) return '';
+
+ $i = strrpos($ns, ":");
+ $ns = ($i) ? substr($ns, 0, $i) : false;
+ return getSidebarFN($ns, $file);
+}
+
+// print a sidebar edit button - if appropriate
+function tpl_sidebar_editbtn() {
+ global $ID, $conf, $lang;
+
+ // check sidebar configuration
+ if (!tpl_getConf('showeditbtn') || !tpl_getConf('page')) return;
+
+ // check sidebar page exists
+ $fileSidebar = getSidebarFN(getNS($ID), tpl_getConf('page'));
+ if (!$fileSidebar) return;
+
+ // check user has edit permission for the sidebar page
+ if (auth_quickaclcheck($fileSidebar) < AUTH_EDIT) return;
+
+?>
+ <div class="secedit">
+ <form class="button" method="post" action="<?php echo wl($fileSidebar,'do=edit'); ?>" onsubmit="return svchk()">
+ <input type="hidden" name="do" value="edit" />
+ <input type="hidden" name="rev" value="" />
+ <input type="hidden" name="id" value="<?php echo $fileSidebar; ?>" />
+ <input type="submit" value="<?php echo $lang['btn_sidebaredit']; ?>" class="button" />
+ </form>
+ </div>
+<?php
+}
+
+// display the sidebar
+function tpl_sidebar_content() {
+ global $ID, $REV, $ACT, $conf;
+
+ // save globals
+ $saveID = $ID;
+ $saveREV = $REV;
+ $saveACT = $ACT;
+
+ // discover file to be displayed in navigation sidebar
+ $fileSidebar = '';
+
+ if (tpl_getConf('page')) {
+ $fileSidebar = getSidebarFN(getNS($ID), tpl_getConf('page'));
+ }
+
+ // determine what to display
+ if ($fileSidebar) {
+ $ID = $fileSidebar;
+ $REV = '';
+ $ACT = 'show';
+# print p_wiki_xhtml($fileSidebar,'',false);
+ tpl_content();
+ }
+ else {
+# global $IDX;
+# html_index($IDX);
+# $ID = getNS($ID);
+ $REV = '';
+ $ACT = 'index';
+
+ tpl_content();
+ }
+
+ // restore globals
+ $ID = $saveID;
+ $REV = $saveREV;
+ $ACT = $saveACT;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/_admin.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/_admin.css
new file mode 100644
index 000000000..f34d8aba3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/_admin.css
@@ -0,0 +1,43 @@
+
+.dokuwiki ul.admin_tasks {
+ font-size: 115%;
+ float: left;
+ width: 40%;
+ list-style-type: none;
+}
+
+.dokuwiki ul.admin_tasks li {
+ line-height: 22px;
+ padding-left: 35px;
+ margin: 1em 0;
+ background: transparent none no-repeat scroll 0 0;
+ text-align: left;
+}
+
+.dokuwiki ul.admin_tasks li div.li {
+ font-weight: bold;
+}
+
+.dokuwiki ul.admin_tasks li.admin_acl {
+ background-image: url(../../images/admin/acl.png);
+}
+
+.dokuwiki ul.admin_tasks li.admin_usermanager {
+ background-image: url(../../images/admin/usermanager.png);
+}
+
+.dokuwiki ul.admin_tasks li.admin_plugin {
+ background-image: url(../../images/admin/plugin.png);
+}
+
+.dokuwiki ul.admin_tasks li.admin_config {
+ background-image: url(../../images/admin/config.png);
+}
+
+.dokuwiki ul.admin_tasks li.admin_revert {
+ background-image: url(../../images/admin/revert.png);
+}
+
+.dokuwiki ul.admin_tasks li.admin_popularity {
+ background-image: url(../../images/admin/popularity.png);
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/_linkwiz.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/_linkwiz.css
new file mode 100644
index 000000000..060707377
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/_linkwiz.css
@@ -0,0 +1,68 @@
+#link__wiz {
+ position: absolute;
+ display: block;
+ z-index: 99;
+ width: 300px;
+ height: 250px;
+ padding: 0;
+ margin: 0;
+ overflow: hidden;
+ border: 1px solid __border__;
+ background-color: __background_neu__;
+ text-align: center;
+}
+
+#link__wiz_header {
+ background-color: __background_alt__;
+ height: 16px;
+ margin-bottom: 5px;
+}
+
+#link__wiz_close {
+ cursor: pointer;
+ margin: 0;
+}
+
+#link__wiz_result {
+ background-color: __background__;
+ width: 293px;
+ height: 193px;
+ overflow: auto;
+ border: 1px solid __border__;
+ margin: 3px auto;
+ text-align: left;
+}
+
+#link__wiz_result div.type_u {
+ padding: 3px 3px 3px 22px;
+ background: transparent url(../../images/up.png) 3px 3px no-repeat;
+}
+
+#link__wiz_result div.type_f {
+ padding: 3px 3px 3px 22px;
+ background: transparent url(../../images/page.png) 3px 3px no-repeat;
+}
+
+#link__wiz_result div.type_d {
+ padding: 3px 3px 3px 22px;
+ background: transparent url(../../images/ns.png) 3px 3px no-repeat;
+}
+
+#link__wiz_result div.even {
+ background-color: __background_neu__;
+}
+
+#link__wiz_result div.selected {
+ background-color: __background_alt__;
+}
+
+#link__wiz_result span {
+ display: block;
+ color: __text_neu__;
+}
+
+/*FIXME maybe move to a more general style sheet*/
+.ondrag {
+ cursor: move;
+ opacity: 0.8;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/design.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/design.css
new file mode 100644
index 000000000..4830a9e2c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/design.css
@@ -0,0 +1,835 @@
+/**
+ * Design elements for default Template
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Anika Henke <anika@selfthinker.org>
+ */
+
+/* -------------- general elements --------------- */
+
+* { padding: 0; margin: 0; }
+
+body {
+ font: 80% "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif;
+ background-color: __background__;
+ color: __text__;
+}
+
+/* the document */
+div.dokuwiki div.page {
+ margin: 4px 2em 0 1em;
+ text-align: justify;
+}
+
+div.dokuwiki table {
+ font-size: 100%;
+}
+
+div.dokuwiki tr,
+div.dokuwiki td,
+div.dokuwiki th {
+}
+
+div.dokuwiki img {
+ border: 0;
+}
+
+div.dokuwiki p,
+div.dokuwiki blockquote,
+div.dokuwiki table,
+div.dokuwiki pre {
+ margin: 0 0 1.0em 0;
+}
+
+div.dokuwiki hr {
+ border: 0px;
+ border-top: 1px solid __border__;
+ text-align: center;
+ height: 0px;
+}
+
+div.dokuwiki div.nothing {
+ text-align: center;
+ margin: 2em;
+}
+
+/* ---------------- forms ------------------------ */
+
+div.dokuwiki form {
+ border: none;
+ display: inline;
+}
+
+div.dokuwiki label.block {
+ display: block;
+ text-align: right;
+ font-weight: bold;
+}
+
+div.dokuwiki label.simple {
+ display: block;
+ text-align: left;
+ font-weight: normal;
+}
+
+div.dokuwiki label.block input.edit {
+ width: 50%;
+}
+
+div.dokuwiki fieldset {
+ width: 300px;
+ text-align: center;
+ border: 1px solid __border__;
+ padding: 0.5em;
+ margin: auto;
+}
+
+div.dokuwiki textarea.edit {
+ font-family: monospace;
+ font-size: 14px;
+ color: __text__;
+ background-color: __background__;
+ border: 1px solid __border__;
+ padding: 0.3em 0 0 0.3em;
+ width: 100%;
+}
+
+/* nice alphatransparency background except for IE <7 */
+html>body div.dokuwiki textarea.edit {
+ background: __background__ url(images/inputshadow.png) repeat-x top;
+}
+
+div.dokuwiki input.edit,
+div.dokuwiki select.edit {
+ font-size: 100%;
+ border: 1px solid __border__;
+ color: __text__;
+ background-color: __background__;
+ vertical-align: middle;
+ margin: 1px;
+ padding: 0.20em 0.3em;
+ display: inline;
+}
+
+/* nice alphatransparency background except for IE <7 */
+html>body div.dokuwiki input.edit,
+html>body div.dokuwiki select.edit {
+ background: __background__ url(images/inputshadow.png) repeat-x top;
+}
+
+div.dokuwiki select.edit {
+ padding: 0.1em 0;
+}
+
+div.dokuwiki input.missing {
+ font-size: 100%;
+ border: 1px solid __border__;
+ color: __text__;
+ background-color: #ffcccc;
+ vertical-align: middle;
+ margin: 1px;
+ padding: 0.20em 0.3em;
+ display: inline;
+}
+
+/* disabled style - not understood by IE */
+div.dokuwiki textarea.edit[disabled],
+div.dokuwiki textarea.edit[readonly],
+div.dokuwiki input.edit[disabled],
+div.dokuwiki input.edit[readonly],
+div.dokuwiki input.button[disabled],
+div.dokuwiki select.edit[disabled] {
+ background-color: __background_neu__!important;
+ color: __text_neu__!important;
+}
+
+/* edit form */
+div.dokuwiki div.toolbar,
+div.dokuwiki div#wiki__editbar {
+ margin: 2px 0;
+ text-align: left;
+}
+div.dokuwiki div#size__ctl {
+ float: right;
+ width: 60px;
+ height: 2.7em;
+}
+div.dokuwiki #size__ctl img {
+ cursor: pointer;
+}
+div.dokuwiki div#wiki__editbar div.editButtons {
+ float: left;
+ padding: 0 1.0em 0.7em 0;
+}
+div.dokuwiki div#wiki__editbar div.summary {
+ float: left;
+}
+div.dokuwiki .nowrap {
+ white-space: nowrap;
+}
+div.dokuwiki div#draft__status {
+ float: right;
+ color: __text_alt__;
+}
+
+div.dokuwiki div.license {
+ padding: 0.5em;
+ font-size: 90%;
+ text-align: center;
+}
+
+div.dokuwiki form#dw__editform div.license {
+ clear: left;
+ font-size: 90%;
+}
+
+/* --------- buttons ------------------- */
+
+div.dokuwiki input.button,
+div.dokuwiki button.button {
+ border: 1px solid __border__;
+ color: __text__;
+ background-color: __background__;
+ vertical-align: middle;
+ text-decoration: none;
+ font-size: 100%;
+ cursor: pointer;
+ margin: 1px;
+ padding: 0.125em 0.4em;
+}
+
+/* nice alphatransparency background except for IE <7 */
+html>body div.dokuwiki input.button,
+html>body div.dokuwiki button.button {
+ background: __background__ url(images/buttonshadow.png) repeat-x bottom;
+}
+
+* html div.dokuwiki input.button,
+* html div.dokuwiki button.button {
+ height: 1.8em;
+}
+
+div.dokuwiki div.secedit input.button {
+ border: 1px solid __border__;
+ color: __text__;
+ background-color: __background__;
+ vertical-align: middle;
+ text-decoration: none;
+ margin: 0;
+ padding: 0;
+ font-size: 10px;
+ cursor: pointer;
+ float: right;
+ display: inline;
+}
+
+/* ----------- page navigator ------------- */
+
+div.dokuwiki div.pagenav {
+ margin: 1em 0 0 0;
+}
+
+div.dokuwiki div.pagenav-prev {
+ text-align: right;
+ float: left;
+ width: 49%
+}
+
+div.dokuwiki div.pagenav-next {
+ text-align: left;
+ float: right;
+ width: 49%
+}
+
+/* --------------- Links ------------------ */
+
+div.dokuwiki a:link,
+div.dokuwiki a:visited {
+ color: __extern__;
+ text-decoration: none;
+}
+div.dokuwiki a:hover,
+div.dokuwiki a:active {
+ color: __text__;
+ text-decoration: underline;
+}
+
+div.dokuwiki h1 a,
+div.dokuwiki h2 a,
+div.dokuwiki h3 a,
+div.dokuwiki h4 a,
+div.dokuwiki h5 a,
+div.dokuwiki a.nolink {
+ color: __text__ !important;
+ text-decoration: none !important;
+}
+
+/* external link */
+div.dokuwiki a.urlextern {
+ background: transparent url(images/link_icon.gif) 0px 1px no-repeat;
+ padding: 1px 0px 1px 16px;
+}
+
+/* windows share */
+div.dokuwiki a.windows {
+ background: transparent url(images/windows.gif) 0px 1px no-repeat;
+ padding: 1px 0px 1px 16px;
+}
+
+/* interwiki link (icon are set by dokuwiki) */
+div.dokuwiki a.interwiki {
+}
+
+/* link to some embedded media */
+div.dokuwiki a.media {
+}
+
+div.dokuwiki a.urlextern:link,
+div.dokuwiki a.windows:link,
+div.dokuwiki a.interwiki:link {
+ color: __extern__;
+}
+
+div.dokuwiki a.urlextern:visited,
+div.dokuwiki a.windows:visited,
+div.dokuwiki a.interwiki:visited {
+ color: purple;
+}
+div.dokuwiki a.urlextern:hover,
+div.dokuwiki a.urlextern:active,
+div.dokuwiki a.windows:hover,
+div.dokuwiki a.windows:active,
+div.dokuwiki a.interwiki:hover,
+div.dokuwiki a.interwiki:active {
+ color: __text__;
+}
+
+/* email link */
+div.dokuwiki a.mail {
+ background: transparent url(images/mail_icon.gif) 0px 1px no-repeat;
+ padding: 1px 0px 1px 16px;
+}
+
+/* existing wikipage */
+div.dokuwiki a.wikilink1 {
+ color: __existing__ !important;
+}
+
+/* not existing wikipage */
+div.dokuwiki a.wikilink2 {
+ color: __missing__ !important;
+ text-decoration: none !important;
+ border-bottom: dashed 1px __missing__ !important;
+}
+
+/* ------------- Page elements ----------------- */
+
+div.dokuwiki div.preview {
+ background-color: __background_neu__;
+ margin: 0 0 0 2em;
+ padding: 4px;
+ border: 1px dashed __text__;
+}
+
+div.dokuwiki div.breadcrumbs {
+ background-color: __background_neu__;
+ color: __text_neu__;
+ font-size: 80%;
+ padding: 0 0 0 4px;
+}
+
+div.dokuwiki span.user {
+ color: __text_other__;
+ font-size: 90%;
+}
+
+div.dokuwiki li.minor {
+ color: __text_neu__;
+ font-style: italic;
+}
+
+/* embedded images */
+div.dokuwiki img.media {
+ margin: 3px;
+}
+
+div.dokuwiki img.medialeft {
+ border: 0;
+ float: left;
+ margin: 0 1.5em 0 0;
+}
+
+div.dokuwiki img.mediaright {
+ border: 0;
+ float: right;
+ margin: 0 0 0 1.5em;
+}
+
+div.dokuwiki img.mediacenter {
+ border: 0;
+ display: block;
+ margin: 0 auto;
+}
+
+/* smileys */
+div.dokuwiki img.middle {
+ vertical-align: middle;
+}
+
+div.dokuwiki acronym {
+ cursor: help;
+ border-bottom: 1px dotted __text__;
+}
+
+/* general headline setup */
+div.dokuwiki h1,
+div.dokuwiki h2,
+div.dokuwiki h3,
+div.dokuwiki h4,
+div.dokuwiki h5 {
+ color: __text__;
+ background-color: inherit;
+ font-size: 100%;
+ font-weight: normal;
+ margin: 0 0 1em 0;
+ padding: 0.5em 0 0 0;
+ border-bottom: 1px solid __border__;
+ clear: left;
+}
+
+/* special headlines */
+div.dokuwiki h1 {font-size: 160%; margin-left: 0px; font-weight: bold;}
+div.dokuwiki h2 {font-size: 150%; margin-left: 20px;}
+div.dokuwiki h3 {font-size: 140%; margin-left: 40px; border-bottom: none; font-weight: bold;}
+div.dokuwiki h4 {font-size: 120%; margin-left: 60px; border-bottom: none; font-weight: bold;}
+div.dokuwiki h5 {font-size: 100%; margin-left: 80px; border-bottom: none; font-weight: bold;}
+
+/* indent different sections */
+div.dokuwiki div.level1 { margin-left: 3px; }
+div.dokuwiki div.level2 { margin-left: 23px; }
+div.dokuwiki div.level3 { margin-left: 43px; }
+div.dokuwiki div.level4 { margin-left: 63px; }
+div.dokuwiki div.level5 { margin-left: 83px; }
+
+/* unordered lists */
+div.dokuwiki ul {
+ line-height: 1.5em;
+ list-style-type: square;
+ list-style-image: none;
+ margin: 0 0 1em 3.5em;
+ color: __text_alt__;
+}
+
+/* ordered lists */
+div.dokuwiki ol {
+ line-height: 1.5em;
+ list-style-image: none;
+ margin: 0 0 1em 3.5em;
+ color: __text_alt__;
+ font-weight: bold;
+}
+
+/* no bottom gap in between and smaller left margin for nested lists */
+div.dokuwiki li ul,
+div.dokuwiki li ol {
+ margin: 0 0 0 1.5em;
+}
+
+/* the list items overriding the ul/ol definition */
+div.dokuwiki .li {
+ color: __text__;
+ font-weight: normal;
+}
+
+div.dokuwiki ol { list-style-type: decimal; }
+div.dokuwiki ol ol { list-style-type: upper-roman; }
+div.dokuwiki ol ol ol { list-style-type: lower-alpha; }
+div.dokuwiki ol ol ol ol { list-style-type: lower-greek; }
+
+div.dokuwiki li.open {
+ list-style-image: url(images/open.gif);
+ /*list-style-type: circle;*/
+}
+
+div.dokuwiki li.closed {
+ list-style-image: url(images/closed.gif);
+ /*list-style-type: disc;*/
+}
+
+div.dokuwiki blockquote {
+ border-left: 2px solid __border__;
+ padding-left: 3px;
+}
+
+div.dokuwiki pre {
+ font-size: 120%;
+ padding: 0.5em;
+ border: 1px dashed __border__;
+ color: __text__;
+ overflow: auto;
+}
+
+/* code blocks by indention */
+div.dokuwiki pre.pre {
+ background-color: __background_other__;
+}
+
+/* code blocks by code tag */
+div.dokuwiki pre.code {
+ background-color: __background_other__;
+}
+
+/* code blocks by file tag */
+div.dokuwiki pre.file {
+ background-color: __background_alt__;
+}
+
+/* filenames for file and code blocks */
+div.dokuwiki dl.file,
+div.dokuwiki dl.code {
+ margin-top: 2em;
+ margin-bottom: 2.5em;
+}
+
+div.dokuwiki dl.file dt,
+div.dokuwiki dl.code dt {
+ border: 1px dashed __border__;
+ display: inline;
+ padding: 0.1em 1em;
+ margin-left: 2em;
+}
+
+div.dokuwiki dl.code dt a,
+div.dokuwiki dl.file dt a {
+ color: __text__;
+}
+
+div.dokuwiki dl.code dt {
+ background-color: __background_other__;
+ border-bottom: 1px solid __background_other__;
+}
+
+div.dokuwiki dl.file dt {
+ background-color: __background_alt__;
+ border-bottom: 1px solid __background_alt__;
+}
+
+
+/* inline code words */
+div.dokuwiki code {
+ font-size: 120%;
+}
+
+/* inline tables */
+div.dokuwiki table.inline {
+ background-color: __background__;
+ border-spacing: 0px;
+ border-collapse: collapse;
+}
+
+div.dokuwiki table.inline th {
+ padding: 3px;
+ border: 1px solid __border__;
+ background-color: __background_alt__;
+}
+
+div.dokuwiki table.inline td {
+ padding: 3px;
+ border: 1px solid __border__;
+}
+
+/* ---------- table of contents ------------------- */
+
+div.dokuwiki div.toc {
+ margin: 1.2em 0 0 2em;
+ float: right;
+ width: 200px;
+ font-size: 80%;
+ clear: both;
+}
+
+div.dokuwiki div.tocheader {
+ border: 1px solid __border__;
+ background-color: __background_alt__;
+ text-align: left;
+ font-weight: bold;
+ padding: 3px;
+ margin-bottom: 2px;
+}
+
+div.dokuwiki span.toc_open,
+div.dokuwiki span.toc_close {
+ border: 0.4em solid __background_alt__;
+ float: right;
+ display: block;
+ margin: 0.4em 3px 0 0;
+}
+
+div.dokuwiki span.toc_open span,
+div.dokuwiki span.toc_close span {
+ display: none;
+}
+
+div.dokuwiki span.toc_open {
+ margin-top: 0.4em;
+ border-top: 0.4em solid __text__;
+}
+
+div.dokuwiki span.toc_close {
+ margin-top: 0;
+ border-bottom: 0.4em solid __text__;
+}
+
+div.dokuwiki #toc__inside {
+ border: 1px solid __border__;
+ background-color: __background__;
+ text-align: left;
+ padding: 0.5em 0 0.7em 0;
+}
+
+div.dokuwiki ul.toc {
+ list-style-type: none;
+ list-style-image: none;
+ line-height: 1.2em;
+ padding-left: 1em;
+ margin: 0;
+}
+
+div.dokuwiki ul.toc li {
+ background: transparent url(images/tocdot2.gif) 0 0.6em no-repeat;
+ padding-left: 0.4em;
+}
+
+div.dokuwiki ul.toc li.clear {
+ background-image: none;
+ padding-left: 0.4em;
+}
+
+div.dokuwiki a.toc:link,
+div.dokuwiki a.toc:visited {
+ color: __extern__;
+}
+
+div.dokuwiki a.toc:hover,
+div.dokuwiki a.toc:active {
+ color: __text__;
+}
+
+/* ---------------------------- Diff rendering --------------------------*/
+div.dokuwiki table.diff {
+ background-color: __background__;
+ width: 100%;
+}
+div.dokuwiki td.diff-blockheader {
+ font-weight: bold;
+}
+div.dokuwiki table.diff th {
+ border-bottom: 1px solid __border__;
+ font-size: 110%;
+ width: 50%;
+ font-weight: normal;
+ text-align: left;
+}
+div.dokuwiki table.diff th a {
+ font-weight: bold;
+}
+div.dokuwiki table.diff th span.user {
+ color: __text__;
+ font-size: 80%;
+}
+div.dokuwiki table.diff th span.sum {
+ font-size: 80%;
+ font-weight: bold;
+}
+div.dokuwiki table.diff th.minor {
+ font-style: italic;
+}
+div.dokuwiki table.diff td {
+ font-family: monospace;
+ font-size: 100%;
+}
+div.dokuwiki td.diff-addedline {
+ background-color: #ddffdd;
+}
+div.dokuwiki td.diff-deletedline {
+ background-color: #ffffbb;
+}
+div.dokuwiki td.diff-context {
+ background-color: __background_neu__;
+}
+div.dokuwiki table.diff td.diff-addedline strong,
+div.dokuwiki table.diff td.diff-deletedline strong {
+ color: red;
+}
+
+/* --------------------- footnotes -------------------------------- */
+
+div.dokuwiki div.footnotes {
+ clear: both;
+ border-top: 1px solid __border__;
+ padding-left: 1em;
+ margin-top: 1em;
+}
+
+div.dokuwiki div.fn {
+ font-size: 90%;
+}
+
+div.dokuwiki a.fn_bot {
+ font-weight: bold;
+}
+
+/* insitu-footnotes */
+div.insitu-footnote {
+ font-size: 80%;
+ line-height: 1.2em;
+ border: 1px solid __border__;
+ background-color: __background_other__;
+ text-align: left;
+ padding: 4px;
+ max-width: 40%; /* IE's width is handled in javascript */
+}
+
+/* overcome IE issue with one line code or file boxes which require h. scrolling */
+* html .insitu-footnote pre.code,
+* html .insitu-footnote pre.file {
+ padding-bottom: 18px;
+}
+
+/* --------------- search result formating --------------- */
+div.dokuwiki .search_result {
+ margin-bottom: 6px;
+ padding: 0 10px 0 30px;
+}
+
+div.dokuwiki .search_snippet {
+ color: __text_other__;
+ font-size: 12px;
+ margin-left: 20px;
+}
+
+div.dokuwiki .search_sep {
+ color: __text__;
+}
+
+div.dokuwiki .search_hit {
+ color: __text__;
+ background-color: __highlight__;
+}
+div.dokuwiki strong.search_hit {
+ font-weight: normal;
+}
+
+div.dokuwiki div.search_quickresult {
+ margin: 0 0 15px 30px;
+ padding: 0 10px 10px 0;
+ border-bottom: 1px dashed __border__;
+}
+div.dokuwiki div.search_quickresult h3 {
+ margin: 0 0 1.0em 0;
+ font-size: 1em;
+ font-weight: bold;
+}
+
+div.dokuwiki ul.search_quickhits {
+ margin: 0 0 0.5em 1.0em;
+}
+
+div.dokuwiki ul.search_quickhits li {
+ margin: 0 1.0em 0 1.0em;
+ float: left;
+ width: 30%;
+}
+
+div.dokuwiki div.section_highlight {
+ background-color: __background_alt__;
+}
+
+/* ------------------ Additional ---------------------- */
+
+div.footerinc {
+ text-align: center;
+}
+.footerinc a img {
+ opacity: 0.5;
+ border: 0;
+}
+
+.footerinc a:hover img {
+ opacity: 1;
+}
+
+/* ---------- AJAX quicksearch ----------- */
+
+div.dokuwiki div.ajax_qsearch {
+ position: absolute;
+ right: 237px;;
+ width: 200px;
+ opacity: 0.9;
+ display: none;
+ font-size: 80%;
+ line-height: 1.2em;
+ border: 1px solid __border__;
+ background-color: __background_other__;
+ text-align: left;
+ padding: 4px;
+}
+
+/* --------- Toolbar -------------------- */
+button.toolbutton {
+ background-color: __background__;
+ padding: 0px;
+ margin: 0 1px 0 0;
+ border: 1px solid __border__;
+ cursor: pointer;
+}
+
+/* nice alphatransparency background except for IE <7 */
+html>body button.toolbutton {
+ background: __background__ url(images/buttonshadow.png) repeat-x bottom;
+}
+
+div.picker {
+ width: 250px;
+ border: 1px solid __border__;
+ background-color: __background_alt__;
+}
+
+div.pk_hl {
+ width: 125px;
+}
+
+button.pickerbutton {
+ padding: 0px;
+ margin: 0 1px 1px 0;
+ border: 0;
+ background-color: transparent;
+ font-size: 80%;
+ cursor: pointer;
+}
+
+/* --------------- Image Details ----------------- */
+
+div.dokuwiki div.img_big {
+ float: left;
+ margin-right: 0.5em;
+}
+
+div.dokuwiki dl.img_tags dt {
+ font-weight: bold;
+ background-color: __background_alt__;
+}
+div.dokuwiki dl.img_tags dd {
+ background-color: __background_neu__;
+}
+
+div.dokuwiki div.imagemeta {
+ color: __text_neu__;
+ font-size: 70%;
+ line-height: 95%;
+}
+
+div.dokuwiki div.imagemeta img.thumb {
+ float: left;
+ margin-right: 0.1em;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/detail.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/detail.php
new file mode 100644
index 000000000..4f42b116e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/detail.php
@@ -0,0 +1,89 @@
+<?php
+/**
+ * DokuWiki Image Detail Template
+ *
+ * This is the template for displaying image details
+ *
+ * You should leave the doctype at the very top - It should
+ * always be the very first line of a document.
+ *
+ * @link http://dokuwiki.org/templates
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+// must be run from within DokuWiki
+if (!defined('DOKU_INC')) die();
+
+?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $conf['lang']?>" lang="<?php echo $conf['lang']?>" dir="ltr">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>
+ <?php echo hsc(tpl_img_getTag('IPTC.Headline',$IMG))?>
+ [<?php echo strip_tags($conf['title'])?>]
+ </title>
+
+ <?php tpl_metaheaders()?>
+
+ <link rel="shortcut icon" href="<?php echo DOKU_TPL?>images/favicon.ico" />
+</head>
+
+<body>
+<div class="dokuwiki">
+ <?php html_msgarea()?>
+
+ <div class="page">
+ <?php if($ERROR){ print $ERROR; }else{ ?>
+
+ <h1><?php echo hsc(tpl_img_getTag('IPTC.Headline',$IMG))?></h1>
+
+ <div class="img_big">
+ <?php tpl_img(900,700) ?>
+ </div>
+
+ <div class="img_detail">
+ <p class="img_caption">
+ <?php print nl2br(hsc(tpl_img_getTag('simple.title'))); ?>
+ </p>
+
+ <p>&larr; <?php echo $lang['img_backto']?> <?php tpl_pagelink($ID)?></p>
+
+ <dl class="img_tags">
+ <?php
+ $t = tpl_img_getTag('Date.EarliestTime');
+ if($t) print '<dt>'.$lang['img_date'].':</dt><dd>'.dformat($t).'</dd>';
+
+ $t = tpl_img_getTag('File.Name');
+ if($t) print '<dt>'.$lang['img_fname'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag(array('Iptc.Byline','Exif.TIFFArtist','Exif.Artist','Iptc.Credit'));
+ if($t) print '<dt>'.$lang['img_artist'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag(array('Iptc.CopyrightNotice','Exif.TIFFCopyright','Exif.Copyright'));
+ if($t) print '<dt>'.$lang['img_copyr'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag('File.Format');
+ if($t) print '<dt>'.$lang['img_format'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag('File.NiceSize');
+ if($t) print '<dt>'.$lang['img_fsize'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag('Simple.Camera');
+ if($t) print '<dt>'.$lang['img_camera'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag(array('IPTC.Keywords','IPTC.Category','xmp.dc:subject'));
+ if($t) print '<dt>'.$lang['img_keywords'].':</dt><dd>'.hsc($t).'</dd>';
+
+ ?>
+ </dl>
+ <?php //Comment in for Debug// dbg(tpl_img_getTag('Simple.Raw'));?>
+ </div>
+
+ <?php } ?>
+ </div>
+</div>
+</body>
+</html>
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/footer.html b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/footer.html
new file mode 100644
index 000000000..38aab7216
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/footer.html
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Example footer include
+ *
+ * This file shows you how to use the include hooks. However I recommend to
+ * create your own complete new template instead.
+ */
+
+$tgt = ($conf['target']['extern']) ? 'target="'.$conf['target']['extern'].'"' : '';
+?>
+
+<div class="footerinc">
+
+ <a <?php echo $tgt?> href="<?php echo DOKU_BASE; ?>feed.php" title="Recent changes RSS feed"><img src="<?php echo DOKU_TPL; ?>images/button-rss.png" width="80" height="15" alt="Recent changes RSS feed" /></a>
+
+ <?php
+ $lic = license_img('button');
+ if($lic){
+ ?>
+ <a <?php echo $tgt?> href="<?php echo $license[$conf['license']]['url']?>" rel="license" title="<?php echo $license[$conf['license']]['name']?>"><img src="<?php echo DOKU_BASE.$lic ?>" width="80" height="15" alt="" /></a>
+ <?php } ?>
+
+ <a <?php echo $tgt?> href="http://www.dokuwiki.org/donate" title="Donate"><img src="<?php echo DOKU_TPL; ?>images/button-donate.gif" alt="Donate" width="80" height="15" /></a>
+
+ <a <?php echo $tgt?> href="http://www.php.net" title="Powered by PHP"><img src="<?php echo DOKU_TPL; ?>images/button-php.gif" width="80" height="15" alt="Powered by PHP" /></a>
+
+ <a <?php echo $tgt?> href="http://validator.w3.org/check/referer" title="Valid XHTML 1.0"><img src="<?php echo DOKU_TPL; ?>images/button-xhtml.png" width="80" height="15" alt="Valid XHTML 1.0" /></a>
+
+ <a <?php echo $tgt?> href="http://jigsaw.w3.org/css-validator/check/referer?profile=css3" title="Valid CSS"><img src="<?php echo DOKU_TPL; ?>images/button-css.png" width="80" height="15" alt="Valid CSS" /></a>
+
+ <a <?php echo $tgt?> href="http://dokuwiki.org/" title="Driven by DokuWiki"><img src="<?php echo DOKU_TPL; ?>images/button-dw.png" width="80" height="15" alt="Driven by DokuWiki" /></a>
+
+<?php
+if ($conf['allowdebug']) {
+ echo '<!-- page made in '.round(delta_time(DOKU_START_TIME), 3).' seconds -->';
+}
+?>
+
+
+</div>
+<?php include(dirname(__FILE__).'/dwtb.html') ?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/UWEB.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/UWEB.png
new file mode 100644
index 000000000..ea03aec94
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/UWEB.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/UWEBshadow.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/UWEBshadow.png
new file mode 100644
index 000000000..212444f0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/UWEBshadow.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/bullet.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/bullet.gif
new file mode 100644
index 000000000..b43de48a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/bullet.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-cc.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-cc.gif
new file mode 100644
index 000000000..5861d637f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-cc.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-css.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-css.png
new file mode 100644
index 000000000..706325e1c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-css.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-donate.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-donate.gif
new file mode 100644
index 000000000..bba284e21
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-donate.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-dw.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-dw.png
new file mode 100644
index 000000000..39d5f56a9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-dw.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-php.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-php.gif
new file mode 100644
index 000000000..19aefb08f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-php.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-rss.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-rss.png
new file mode 100644
index 000000000..b036f7152
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-rss.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-xhtml.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-xhtml.png
new file mode 100644
index 000000000..ec686442c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-xhtml.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/buttonshadow.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/buttonshadow.png
new file mode 100644
index 000000000..f60be309f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/buttonshadow.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/closed.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/closed.gif
new file mode 100644
index 000000000..8414d4d69
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/closed.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/favicon.ico
new file mode 100644
index 000000000..8b9616abb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/favicon.ico
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/inputshadow.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/inputshadow.png
new file mode 100644
index 000000000..d286beb22
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/inputshadow.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/link_icon.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/link_icon.gif
new file mode 100644
index 000000000..815ccb1b1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/link_icon.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/mail_icon.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/mail_icon.gif
new file mode 100644
index 000000000..50a87a9a0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/mail_icon.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/open.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/open.gif
new file mode 100644
index 000000000..f5d5c7e56
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/open.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/tocdot2.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/tocdot2.gif
new file mode 100644
index 000000000..3d39c2e73
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/tocdot2.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/windows.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/windows.gif
new file mode 100644
index 000000000..4f12acce1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/windows.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/layout.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/layout.css
new file mode 100644
index 000000000..ded2d87a2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/layout.css
@@ -0,0 +1,79 @@
+/**
+ * Tableless Layout for default template
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author moraes <moraes@tipos.com.br>
+ */
+
+/* -------------- top row --------------- */
+div.dokuwiki .header {
+ padding: 3px 0 0 2px;
+}
+
+div.dokuwiki .pagename {
+ float: left;
+ font-size: 200%;
+ font-weight: bolder;
+ color: __background_alt__;
+ text-align: left;
+ vertical-align: middle;
+}
+
+div.dokuwiki .pagename a {
+ color: __extern__ !important;
+ text-decoration: none !important;
+}
+
+div.dokuwiki .logo {
+ float: right;
+ font-size: 220%;
+ font-weight: bolder;
+ text-align: right;
+ vertical-align: middle;
+}
+
+div.dokuwiki .logo a {
+ color: __background_alt__ !important;
+ text-decoration: none !important;
+ font-variant: small-caps;
+ letter-spacing: 2pt;
+}
+
+/* --------------- top and bottom bar ---------------- */
+div.dokuwiki .bar {
+ border-top: 1px solid __border__;
+ border-bottom: 1px solid __border__;
+ background: __background_alt__;
+ padding: 0.1em 0.15em;
+ clear: both;
+}
+
+div.dokuwiki .bar-left {
+ float: left;
+}
+
+div.dokuwiki .bar-right {
+ float: right;
+ text-align: right;
+}
+
+div.dokuwiki #bar__bottom {
+ margin-bottom: 3px;
+}
+
+/* ------------- File Metadata ----------------------- */
+
+div.dokuwiki div.meta {
+ clear: both;
+ margin-top: 1em;
+ color: __text_alt__;
+ font-size: 70%;
+}
+
+div.dokuwiki div.meta div.user {
+ float: left;
+}
+
+div.dokuwiki div.meta div.doc {
+ text-align: right;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/main.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/main.php
new file mode 100644
index 000000000..be03b3be2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/main.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * DokuWiki Default Template
+ *
+ * This is the template you need to change for the overall look
+ * of DokuWiki.
+ *
+ * You should leave the doctype at the very top - It should
+ * always be the very first line of a document.
+ *
+ * @link http://dokuwiki.org/templates
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+// must be run from within DokuWiki
+if (!defined('DOKU_INC')) die();
+
+ob_start();
+
+include(dirname(__FILE__).'/main_index.php');
+
+$content = ob_get_clean();
+
+echo $content;
+
+?>
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/main_index.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/main_index.php
new file mode 100644
index 000000000..976d139ce
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/main_index.php
@@ -0,0 +1,121 @@
+<?php
+/**
+ * DokuWiki Default Template
+ *
+ * This is the template you need to change for the overall look
+ * of DokuWiki.
+ *
+ * You should leave the doctype at the very top - It should
+ * always be the very first line of a document.
+ *
+ * @link http://dokuwiki.org/templates
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+// must be run from within DokuWiki
+if (!defined('DOKU_INC')) die();
+
+?>
+ <?php tpl_metaheaders()?>
+ <?php /*old includehook*/ @include(dirname(__FILE__).'/meta.html')?>
+
+<?php /*old includehook*/ @include(dirname(__FILE__).'/topheader.html')?>
+<div class="dokuwiki">
+ <?php html_msgarea()?>
+
+ <div class="stylehead">
+
+ <div class="header">
+ <div class="pagename">
+ [[<?php tpl_link(wl($ID,'do=backlink'),tpl_pagetitle($ID,true),'title="'.$lang['btn_backlink'].'"')?>]]
+ </div>
+ <div class="logo">
+ <?php tpl_link(wl(),$conf['title'],'name="dokuwiki__top" id="dokuwiki__top" accesskey="h" title="[H]"')?>
+ </div>
+
+ <div class="clearer"></div>
+ </div>
+
+ <?php /*old includehook*/ @include(dirname(__FILE__).'/header.html')?>
+
+ <div class="bar" id="bar__top">
+ <div class="bar-left" id="bar__topleft">
+ <?php tpl_button('edit')?>
+ <?php tpl_button('history')?>
+ </div>
+
+ <div class="bar-right" id="bar__topright">
+ <?php tpl_button('recent')?>
+ <?php tpl_searchform()?>&nbsp;
+ </div>
+
+ <div class="clearer"></div>
+ </div>
+
+ <?php if($conf['breadcrumbs']){?>
+ <div class="breadcrumbs">
+ <?php tpl_breadcrumbs()?>
+ <?php //tpl_youarehere() //(some people prefer this)?>
+ </div>
+ <?php }?>
+
+ <?php if($conf['youarehere']){?>
+ <div class="breadcrumbs">
+ <?php tpl_youarehere() ?>
+ </div>
+ <?php }?>
+
+ </div>
+ <?php flush()?>
+
+ <?php /*old includehook*/ @include(dirname(__FILE__).'/pageheader.html')?>
+
+ <div class="page">
+ <!-- wikipage start -->
+ <?php tpl_content()?>
+ <!-- wikipage stop -->
+ </div>
+
+ <div class="clearer">&nbsp;</div>
+
+ <?php flush()?>
+
+ <div class="stylefoot">
+
+ <div class="meta">
+ <div class="user">
+ <?php tpl_userinfo()?>
+ </div>
+ <div class="doc">
+ <?php tpl_pageinfo()?>
+ </div>
+ </div>
+
+ <?php /*old includehook*/ @include(dirname(__FILE__).'/pagefooter.html')?>
+
+ <div class="bar" id="bar__bottom">
+ <div class="bar-left" id="bar__bottomleft">
+ <?php tpl_button('edit')?>
+ <?php tpl_button('history')?>
+ <?php tpl_button('revert')?>
+ </div>
+ <div class="bar-right" id="bar__bottomright">
+ <?php tpl_button('subscribe')?>
+ <?php tpl_button('subscribens')?>
+ <?php tpl_button('admin')?>
+ <?php tpl_button('profile')?>
+ <?php tpl_button('login')?>
+ <?php tpl_button('index')?>
+ <?php tpl_button('top')?>&nbsp;
+ </div>
+ <div class="clearer"></div>
+ </div>
+
+ </div>
+
+ <?php tpl_license(false);?>
+
+</div>
+<?php /*old includehook*/ @include(dirname(__FILE__).'/footer.html')?>
+
+<div class="no"><?php /* provide DokuWiki housekeeping, required in all templates */ tpl_indexerWebBug()?></div>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/media.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/media.css
new file mode 100644
index 000000000..2831c984f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/media.css
@@ -0,0 +1,205 @@
+/**
+ * The CSS in here cotrols the appearance of the media manager
+ */
+
+#media__manager {
+ height: 100%;
+ overflow: hidden;
+}
+
+#media__left {
+ width: 30%;
+ border-right: solid 1px __border__;
+
+ height: 100%;
+ overflow: auto;
+ position: absolute;
+ left: 0;
+}
+
+#media__right {
+ width: 69.7%;
+
+ height: 100%;
+ overflow: auto;
+ position: absolute;
+ right: 0;
+}
+
+#media__manager h1 {
+ margin: 0;
+ padding: 0;
+ margin-bottom: 0.5em;
+}
+
+/* --- Tree formatting --- */
+
+#media__tree img {
+ float: left;
+ padding: 0.5em 0.3em 0 0;
+}
+
+#media__tree ul {
+ list-style-type: none;
+ list-style-image: none;
+ margin-left: 1.5em;
+}
+
+#media__tree li {
+ clear: left;
+ list-style-type: none;
+ list-style-image: none;
+}
+*+html #media__tree li,
+* html #media__tree li {
+ border: 1px solid __background__;
+}/* I don't understand this, but this fixes a style bug in IE;
+it's dirty, so any "real" fixes are welcome */
+
+/* --- options --- */
+
+#media__opts {
+ padding-left: 1em;
+ margin-bottom: 0.5em;
+}
+
+#media__opts input {
+ float: left;
+ display: block;
+ margin-top: 4px;
+ position: absolute;
+}
+*+html #media__opts input,
+* html #media__opts input {
+ position: static;
+}
+
+#media__opts label {
+ display: block;
+ float: left;
+ margin-left: 20px;
+ margin-bottom: 4px;
+}
+*+html #media__opts label,
+* html #media__opts label {
+ margin-left: 10px;
+}
+
+#media__opts br {
+ clear: left;
+}
+
+/* --- file list --- */
+
+#media__content img.load {
+ margin: 1em auto;
+}
+
+#media__content #scroll__here {
+ border: 1px dashed __border__;
+}
+
+#media__content .odd {
+ background-color: __background_other__;
+ padding: 0.4em;
+}
+
+#media__content .even {
+ padding: 0.4em;
+}
+
+#media__content a.mediafile {
+ margin-right: 1.5em;
+ font-weight: bold;
+}
+
+#media__content div.detail {
+ padding: 0.3em 0 0.3em 2em;
+}
+
+#media__content div.detail div.thumb {
+ float: left;
+ width: 130px;
+ text-align: center;
+ margin-right: 0.4em;
+}
+
+
+#media__content img.btn {
+ vertical-align: text-bottom;
+}
+
+#media__content div.example {
+ color: __text_neu__;
+ margin-left: 1em;
+}
+
+/* --- upload form --- */
+
+#media__content div.upload {
+ font-size: 90%;
+ padding: 0 0.5em 0.5em 0.5em;
+}
+
+#media__content form#dw__upload,
+#media__content div#dw__flashupload {
+ display: block;
+ border-bottom: solid 1px __border__;
+ padding: 0 0.5em 1em 0.5em;
+}
+#media__content form#dw__upload fieldset {
+ padding: 0;
+ margin: 0;
+ border: none;
+ width: auto;
+}
+#media__content form#dw__upload p {
+ text-align: left;
+ padding: 0.25em 0;
+ margin: 0;
+ line-height: 1.0em;
+}
+#media__content form#dw__upload label.check {
+ float: none;
+ width: auto;
+ margin-left: 11.5em;
+}
+
+/* --- meta edit form --- */
+
+#media__content form.meta {
+ display: block;
+ padding: 0 0 1em 0;
+}
+
+#media__content form.meta label {
+ display: block;
+ width: 25%;
+ float: left;
+ font-weight: bold;
+ margin-left: 1em;
+ clear: left;
+}
+
+#media__content form.meta .edit {
+ font: 100% "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif;
+ float: left;
+ width: 70%;
+ padding-right: 0;
+ padding-left: 0.2em;
+ margin: 2px;
+}
+
+#media__content form.meta textarea.edit {
+ height: 8em;
+}
+
+#media__content form.meta div.metafield {
+ clear: left;
+}
+
+#media__content form.meta div.buttons {
+ clear: left;
+ margin-left: 20%;
+ padding-left: 1em;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/mediamanager.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/mediamanager.php
new file mode 100644
index 000000000..7b7fe8675
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/mediamanager.php
@@ -0,0 +1,44 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<?php
+/**
+ * DokuWiki Default Template
+ *
+ * This is the template for the media manager popup
+ *
+ * You should leave the doctype at the very top - It should
+ * always be the very first line of a document.
+ *
+ * @link http://dokuwiki.org/templates
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $conf['lang']?>" lang="<?php echo $conf['lang']?>" dir="ltr">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>
+ <?php echo hsc($lang['mediaselect'])?>
+ [<?php echo strip_tags($conf['title'])?>]
+ </title>
+ <?php tpl_metaheaders()?>
+ <link rel="shortcut icon" href="<?php echo DOKU_TPL?>images/favicon.ico" />
+</head>
+
+<body>
+<div id="media__manager" class="dokuwiki">
+ <div id="media__left">
+ <?php html_msgarea()?>
+ <h1><?php echo hsc($lang['mediaselect'])?></h1>
+
+ <?php /* keep the id! additional elements are inserted via JS here */?>
+ <div id="media__opts"></div>
+
+ <?php tpl_mediaTree() ?>
+ </div>
+
+ <div id="media__right">
+ <?php tpl_mediaContent() ?>
+ </div>
+</div>
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/print.css
new file mode 100644
index 000000000..1d6e0756f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/print.css
@@ -0,0 +1,238 @@
+
+body {
+ font: 10pt "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif;
+ background-color: White;
+ color: Black;
+}
+
+table {
+ font-size: 100%;
+ padding: 0;
+ margin: 0;
+}
+
+tr,td,th { padding: 0; margin: 0; }
+
+img { border: 0; }
+
+a {
+ color: #000000;
+ text-decoration: none;
+ background: none !important;
+}
+
+
+div.meta {
+ clear: both;
+ margin-top: 1em;
+ font-size: 70%;
+ text-align: right;
+}
+
+
+div.notify,
+div.info,
+div.success,
+div.error,
+div.breadcrumbs,
+div.secedit {
+ display: none;
+}
+
+/* --------------------- Text formating -------------------------------- */
+
+/* external link */
+a.urlextern:after {
+ content: " [" attr(href) "]";
+ font-size: 90%;
+}
+
+/* interwiki link */
+a.interwiki:after {
+ content: " [" attr(href) "]";
+ font-size: 90%;
+}
+
+/* email link */
+a.mail:after {
+ content: " [" attr(href) "]";
+ font-size: 90%;
+}
+
+/* existing wikilink */
+a.wikilink1 { text-decoration: underline; }
+
+/* the document */
+div.page {
+ text-align: justify;
+}
+
+/* general headline setup */
+h1, h2, h3, h4, h5 {
+ color: Black;
+ background-color: transparent;
+ font-family: "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif;
+ font-size: 100%;
+ font-weight: normal;
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ margin-bottom: 1em;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0.5em;
+ padding-bottom: 0;
+ border-bottom: 1px solid #000000;
+ clear: left;
+}
+
+/* special headlines */
+h1 { font-size: 160%; font-weight: bold; }
+h2 { font-size: 150%; }
+h3 { font-size: 140%; border-bottom: none; }
+h4 { font-size: 120%; border-bottom: none; }
+h5 { font-size: 100%; border-bottom: none; }
+
+/* embedded images */
+img.media {
+ margin: 3px;
+}
+
+img.medialeft {
+ border: 0;
+ float: left;
+ margin: 0 1.5em 0 0;
+}
+
+img.mediaright {
+ border: 0;
+ float: right;
+ margin: 0 0 0 1.5em;
+}
+
+/* unordered lists */
+ul {
+ line-height: 1.5em;
+ list-style-type: square;
+ margin: 0 0 1em 3.5em;
+ padding: 0;
+}
+
+/* ordered lists */
+ol {
+ line-height: 1.5em;
+ margin: 0 0 1em 3.5em;
+ padding: 0;
+ font-weight: normal;
+}
+
+div.dokuwiki li ul {
+ margin-bottom: 0;
+}
+div.dokuwiki li ol {
+ margin-bottom: 0;
+}
+
+div.dokuwiki ol { list-style-type: decimal; }
+div.dokuwiki ol ol { list-style-type: upper-roman; }
+div.dokuwiki ol ol ol { list-style-type: lower-alpha; }
+div.dokuwiki ol ol ol ol { list-style-type: lower-greek; }
+
+/* the list items overriding the ol definition */
+span.li {
+ font-weight: normal;
+}
+
+/* code blocks by indention */
+pre.pre {
+ font-size: 8pt;
+ padding: 0.5em;
+ border: 1px dashed #000000;
+ color: Black;
+ overflow: visible;
+}
+
+/* code blocks by code tag */
+pre.code {
+ font-size: 8pt;
+ padding: 0.5em;
+ border: 1px dashed #000000;
+ color: Black;
+ overflow: visible;
+}
+
+/* inline code words */
+code {
+ font-size: 120%;
+}
+
+/* code blocks by file tag */
+pre.file {
+ font-size: 8pt;
+ padding: 0.5em;
+ border: 1px dotted #000000;
+ color: Black;
+ overflow: visible;
+}
+
+/* footnotes */
+div.footnotes {
+ clear: both;
+ border-top: 1px solid #000000;
+ padding-left: 1em;
+ margin-top: 1em;
+}
+
+div.fn {
+ font-size: 90%;
+}
+
+a.fn_top {
+ vertical-align: super;
+ font-size: 80%;
+}
+
+a.fn_bot {
+ vertical-align: super;
+ font-size: 80%;
+ font-weight: bold;
+}
+
+acronym {
+ border: 0;
+}
+
+/* ---------- inline tables ------------------- */
+
+table.inline {
+ font-size: 80%;
+ background-color: #ffffff;
+ border-spacing: 0px;
+ border-collapse: collapse;
+}
+
+table.inline th {
+ padding: 3px;
+ border: 1px solid #000000;
+ border-bottom: 2px solid #000000;
+}
+
+table.inline td {
+ padding: 3px;
+ border: 1px solid #000000;
+}
+
+.leftalign {
+ text-align: left;
+}
+
+.centeralign {
+ text-align: center;
+}
+
+.rightalign {
+ text-align: right;
+}
+
+.toc, .footerinc, .header, .bar, .user { display: none; }
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/rtl.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/rtl.css
new file mode 100644
index 000000000..af3793f7d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/rtl.css
@@ -0,0 +1,119 @@
+/**
+ * Layout and dedsign corrections for right-to-left languages
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Dotan Kamber <kamberd@yahoo.com>
+ */
+
+.bar-left {
+ float: right;
+ text-align: right;
+}
+
+.bar-right {
+ float: left;
+ text-align: left;
+}
+
+.pagename {
+ float: right;
+ text-align: right;
+}
+
+.logo {
+ float: left;
+ text-align: left;
+}
+
+label {
+ text-align: left;
+}
+
+label.simple {
+ text-align: right;
+}
+
+div.meta div.user {
+ float: right;
+}
+
+div.meta div.doc {
+ text-align: left;
+}
+
+/* ------------------ Design corrections --------------------------------- */
+
+div.dokuwiki ul,
+div.dokuwiki ol {
+ margin: 0.5em 1.5em 0.5em 0;
+}
+
+div.dokuwiki a.urlextern,
+div.dokuwiki a.interwiki,
+div.dokuwiki a.windows,
+div.dokuwiki a.mail,
+div.dokuwiki a.mail.JSnocheck {
+ /* should work but doesn't - so we just disable icons here*/
+ /*
+ background-position: right 1px;
+ padding-right: 16px;
+ */
+ background-image: none !important;
+ padding: 0px 0px 0px 0px;
+}
+
+div.dokuwiki div.secedit input.button {
+ float: left;
+}
+
+/* headlines */
+div.dokuwiki h1, div.dokuwiki h2, div.dokuwiki h3, div.dokuwiki h4, div.dokuwiki h5 {
+ clear: right;
+}
+
+/* special headlines */
+div.dokuwiki h1 { margin-left: 0px; margin-right: 0px; }
+div.dokuwiki h2 { margin-left: 0px; margin-right: 20px; }
+div.dokuwiki h3 { margin-left: 0px; margin-right: 40px; }
+div.dokuwiki h4 { margin-left: 0px; margin-right: 60px; }
+div.dokuwiki h5 { margin-left: 0px; margin-right: 80px; }
+
+/* indent different sections */
+div.dokuwiki div.level1 { margin-left: 0px; margin-right: 3px; }
+div.dokuwiki div.level2 { margin-left: 0px; margin-right: 23px; }
+div.dokuwiki div.level3 { margin-left: 0px; margin-right: 43px; }
+div.dokuwiki div.level4 { margin-left: 0px; margin-right: 63px; }
+div.dokuwiki div.level5 { margin-left: 0px; margin-right: 83px; }
+
+/* TOC control */
+div.dokuwiki div.toc {
+ float: left;
+}
+
+div.dokuwiki div.tocheader {
+ text-align: right;
+}
+
+div.dokuwiki #toc__inside {
+ text-align: right;
+}
+
+div.dokuwiki ul.toc {
+ padding: 0;
+ padding-right: 1em;
+}
+
+div.dokuwiki ul.toc li {
+ background-position: right 0.6em;
+ padding-right: 0.4em;
+ direction: rtl;
+}
+
+div.dokuwiki ul.toc li.clear {
+ padding-right: 0.4em;
+}
+
+div.dokuwiki pre {
+ text-align: left;
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/style.ini b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/style.ini
new file mode 100644
index 000000000..dfd5500fa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/style.ini
@@ -0,0 +1,67 @@
+; Please see http://www.php.net/manual/en/function.parse-ini-file.php
+; for limitations of the ini format used here
+
+; Define the stylesheets your template uses here. The second value
+; defines for which output media the style should be loaded. Currently
+; print, screen and rtl are supported. rtl styles are loaded additionally
+; to screen styles if a right-to-left language is selected (eg. hebrew)
+[stylesheets]
+layout.css = screen
+design.css = screen
+style.css = screen
+
+media.css = screen
+_admin.css = screen
+_linkwiz.css = screen
+
+rtl.css = rtl
+print.css = print
+
+; This section is used to configure some placeholder values used in
+; the stylesheets. Changing this file is the simplest method to
+; give your wiki a new look.
+[replacements]
+
+;--------------------------------------------------------------------------
+;------ guaranteed dokuwiki color placeholders that every plugin can use
+; main text and background colors
+__text__ = "#000"
+__background__ = "#fff"
+; alternative text and background colors
+__text_alt__ = "#638c9c"
+__background_alt__ = "#dee7ec"
+; neutral text and background colors
+__text_neu__ = "#666"
+__background_neu__ = "#f5f5f5"
+; border color
+__border__ = "#8cacbb"
+;--------------------------------------------------------------------------
+
+; other text and background colors
+__text_other__ = "#ccc"
+__background_other__ = "#f7f9fa"
+
+; these are used for links
+__extern__ = "#436976"
+__existing__ = "#090"
+__missing__ = "#f30"
+
+; highlighting search snippets
+__highlight__ = "#ff9"
+
+
+;--------------------------------------------------------------------------
+;------ for keeping old templates and plugins compatible to the old pattern
+; (to be deleted at the next or after next release)
+__white__ = "#fff"
+__lightgray__ = "#f5f5f5"
+__mediumgray__ = "#ccc"
+__darkgray__ = "#666"
+__black__ = "#000"
+
+; these are the shades of blue
+__lighter__ = "#f7f9fa"
+__light__ = "#eef3f8"
+__medium__ = "#dee7ec"
+__dark__ = "#8cacbb"
+__darker__ = "#638c9c"
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/index.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/index.php
new file mode 100644
index 000000000..a55081738
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/index.php
@@ -0,0 +1,68 @@
+<?php
+/**
+ * This file reads the style.ini of the used template and displays the
+ * replacements defined in it. Color replacements will be displayed
+ * visually. This should help with adjusting and using the styles
+ * specified in the style.ini
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Anika Henke <anika@selfthinker.org>
+ */
+?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Template Replacements</title>
+ <style type="text/css">
+ body {
+ background-color: #fff;
+ color: #000;
+ }
+ caption {
+ font-weight: bold;
+ }
+ td {
+ margin: 0;
+ padding: 0.5em 2em;
+ font-family: monospace;
+ font-size: 120%;
+ border: 1px solid #fff;
+ }
+ tr:hover td {
+ border: 1px solid #ccc;
+ }
+ .color {
+ padding: 0.25em 1em;
+ border: 1px #000 solid;
+ }
+ </style>
+</head>
+<body>
+<?php
+if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
+require_once(DOKU_INC.'inc/init.php');
+
+$ini = @parse_ini_file($conf['template'].'/style.ini',true);
+if ($ini) {
+ echo '<table>';
+ echo "<caption>".htmlspecialchars($conf['template'])."'s style.ini</caption>";
+ foreach($ini['replacements'] as $key => $val){
+ echo '<tr>';
+ echo '<td>'.htmlspecialchars($key).'</td>';
+ echo '<td>'.htmlspecialchars($val).'</td>';
+ echo '<td>';
+ if(preg_match('/^#[0-f]{3,6}$/i',$val)){
+ echo '<div class="color" style="background-color:'.$val.';">&nbsp;</div>';
+ }
+ echo '</td>';
+ echo '</tr>';
+ }
+ echo '</table>';
+} else {
+ echo "<p>Non-existent template: <strong>".htmlspecialchars($conf['template'])."</strong></p>";
+}
+?>
+</body>
+</html>