<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<!--}}}-->
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected{color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity:60)';}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0em 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0em 1em 1em; left:0px; top:0px;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0em 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 .3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0em 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0em 0em 0em; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0em;}
.wizardFooter .status {padding:0em 0.4em 0em 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em 0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0em; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em 0.2em 0.2em 0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em 0.2em 0.2em 0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em 1em 1em 1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0em;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0em 0em 0.5em;}
.tab {margin:0em 0em 0em 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0em 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0em 1em;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0em 0.25em; padding:0em 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0em; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

.fieldsetFix {border:0; padding:0; margin:1px 0px 1px 0px;}

.sparkline {line-height:1em;}
.sparktick {outline:0;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0em; right:0em;}
#backstageButton a {padding:0.1em 0.4em 0.1em 0.4em; margin:0.1em 0.1em 0.1em 0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin:0em 3em 0em 3em; padding:1em 1em 1em 1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em 0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none ! important;}
#displayArea {margin: 1em 1em 0em 1em;}
/* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
noscript {display:none;}
}
/*}}}*/
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<!--}}}-->
To get started with this blank TiddlyWiki, you'll need to modify the following tiddlers:
* SiteTitle & SiteSubtitle: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* MainMenu: The menu (usually on the left)
* DefaultTiddlers: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
These InterfaceOptions for customising TiddlyWiki are saved in your browser

Your username for signing your edits. Write it as a WikiWord (eg JoeBloggs)

<<option txtUserName>>
<<option chkSaveBackups>> SaveBackups
<<option chkAutoSave>> AutoSave
<<option chkRegExpSearch>> RegExpSearch
<<option chkCaseSensitiveSearch>> CaseSensitiveSearch
<<option chkAnimate>> EnableAnimations

----
Also see [[AdvancedOptions]]
<<importTiddlers>>
Example
/***
|Name|AttachFilePluginFormatters|
|Source|http://www.TiddlyTools.com/#AttachFilePluginFormatters|
|Version|4.0.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1.3|
|Type|plugin|
|Requires||
|Overrides|'image' and 'prettyLink' formatters, TiddlyWiki.prototype.getRecursiveTiddlerText|
|Description|run-time library for displaying attachment tiddlers|

This plugin provides "stand-alone" processing for //rendering// attachment tiddlers created by [[AttachFilePlugin]].   Attachment tiddlers are tagged with<<tag attachment>>and contain binary file content (e.g., jpg, gif, pdf, mp3, etc.) that has been stored directly as base64 text-encoded data or can be loaded from external files stored on a local filesystem or remote web server.

NOTE: This plugin does not include the "control panel" and supporting functions needed to //create// new attachment tiddlers.  Those features are provided by [[AttachFilePlugin]], which can be installed while building your document, and then safely omitted to reduce the overall file size when you publish your finished document (assuming you don't intend to create any additional attachment tiddlers in that document)
!!!!!Formatters
<<<
This plugin extends the behavior of the following TiddlyWiki core "wikify()" formatters:
* embedded images: {{{[img[tooltip|image]]}}}
* linked embedded images: {{{[img[tooltip|image][link]]}}}
* external/"pretty" links: {{{[[label|link]]}}}
''Please refer to AttachFilePlugin (source: http://www.TiddlyTools.com/#AttachFilePlugin) for additional information.''
<<<
!!!!!Revisions
<<<
2009.06.04 [4.0.0] changed attachment storage format to use //sections// instead of embedded substring markers.
2008.01.08 [*.*.*] plugin size reduction: documentation moved to ...Info
2007.12.04 [*.*.*] update for TW2.3.0: replaced deprecated core functions, regexps, and macros
2007.10.29 [3.7.0] more code reduction: removed upload handling from AttachFilePlugin (saves ~7K!)
2007.10.28 [3.6.0] removed duplicate formatter code from AttachFilePlugin (saves ~10K!) and updated documentation accordingly.  This plugin ([[AttachFilePluginFormatters]]) is now //''required''// in order to display attached images/binary files within tiddler content.
2006.05.20 [3.4.0] through 2007.03.01 [3.5.3] sync with AttachFilePlugin
2006.05.13 [3.2.0] created from AttachFilePlugin v3.2.0
<<<
!!!!!Code
***/
// // version
//{{{
version.extensions.AttachFilePluginFormatters= {major: 4, minor: 0, revision: 0, date: new Date(2009,6,4)};
//}}}

//{{{
if (config.macros.attach==undefined) config.macros.attach= { };
//}}}
//{{{
if (config.macros.attach.isAttachment==undefined) config.macros.attach.isAttachment=function (title) {
	var tiddler = store.getTiddler(title);
	if (tiddler==undefined || tiddler.tags==undefined) return false;
	return (tiddler.tags.indexOf("attachment")!=-1);
}
//}}}

//{{{
// test for local file existence - returns true/false without visible error display
if (config.macros.attach.fileExists==undefined) config.macros.attach.fileExists=function(f) {
	if(window.Components) { // MOZ
		try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); }
		catch(e) { return false; } // security access denied
		var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
		try { file.initWithPath(f); }
		catch(e) { return false; } // invalid directory
		return file.exists();
	}
	else { // IE
		var fso = new ActiveXObject("Scripting.FileSystemObject");
		return fso.FileExists(f);
	}
}
//}}}

//{{{
if (config.macros.attach.getAttachment==undefined) config.macros.attach.getAttachment=function(title) {

	// extract embedded data, local and remote links (if any)
	var text=store.getTiddlerText(title,'');
	var embedded=store.getTiddlerText(title+'##data','').trim();
	var locallink=store.getTiddlerText(title+'##file','').trim();
	var remotelink=store.getTiddlerText(title+'##url','').trim();

	// backward-compatibility for older attachments (pre 4.0.0)
	var startmarker="---BEGIN_DATA---\n";
	var endmarker="\n---END_DATA---";
	var pos=0; var endpos=0;
	if ((pos=text.indexOf(startmarker))!=-1 && (endpos=text.indexOf(endmarker))!=-1)
		embedded="data:"+(text.substring(pos+startmarker.length,endpos)).replace(/\n/g,'');
	if ((pos=text.indexOf("/%LOCAL_LINK%/"))!=-1)
		locallink=text.substring(text.indexOf("|",pos)+1,text.indexOf("]]",pos));
	if ((pos=text.indexOf("/%REMOTE_LINK%/"))!=-1)
		remotelink=text.substring(text.indexOf("|",pos)+1,text.indexOf("]]",pos));

	// if there is a data: URI defined (not supported by IE)
	if (embedded.length && !config.browser.isIE) return embedded;

	// document is being served remotely... use remote URL (if any)  (avoids security alert)
	if (remotelink.length && document.location.protocol!="file:")
		return remotelink;  

	// local link only... return link without checking file existence (avoids security alert)
	if (locallink.length && !remotelink.length) 
		return locallink; 

	// local link, check for file exist... use local link if found
	if (locallink.length) { 
		locallink=locallink.replace(/^\.[\/\\]/,''); // strip leading './' or '.\' (if any)
		if (this.fileExists(getLocalPath(locallink))) return locallink;
		// maybe local link is relative... add path from current document and try again
		var pathPrefix=document.location.href;  // get current document path and trim off filename
		var slashpos=pathPrefix.lastIndexOf("/"); if (slashpos==-1) slashpos=pathPrefix.lastIndexOf("\\"); 
		if (slashpos!=-1 && slashpos!=pathPrefix.length-1) pathPrefix=pathPrefix.substr(0,slashpos+1);
		if (this.fileExists(getLocalPath(pathPrefix+locallink))) return locallink;
	}

	// no embedded data, no local (or not found), fallback to remote URL (if any)
	if (remotelink.length) return remotelink;

	// attachment URL doesn't resolve, just return input as is
	return title;
}
//}}}
//{{{
if (config.macros.attach.init_formatters==undefined) config.macros.attach.init_formatters=function() {
	if (this.initialized) return;

	// find the formatter for "image" and replace the handler
	for (var i=0; i<config.formatters.length && config.formatters[i].name!="image"; i++);
	if (i<config.formatters.length)	config.formatters[i].handler=function(w) {
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) // Simple bracketted link
			{
			var e = w.output;
			if(lookaheadMatch[5])
				{
				var link = lookaheadMatch[5];
				// ELS -------------
				var external=config.formatterHelpers.isExternalLink(link);
				if (external)
					{
					if (config.macros.attach.isAttachment(link))
						{
						e = createExternalLink(w.output,link);
						e.href=config.macros.attach.getAttachment(link);
						e.title = config.macros.attach.linkTooltip + link;
						}
					else
						e = createExternalLink(w.output,link);
					}
				else 
					e = createTiddlyLink(w.output,link,false,null,w.isStatic);
				// ELS -------------
				addClass(e,"imageLink");
				}
			var img = createTiddlyElement(e,"img");
			if(lookaheadMatch[1])
				img.align = "left";
			else if(lookaheadMatch[2])
				img.align = "right";
			if(lookaheadMatch[3])
				img.title = lookaheadMatch[3];
			img.src = lookaheadMatch[4];
			// ELS -------------
			if (config.macros.attach.isAttachment(lookaheadMatch[4]))
				img.src=config.macros.attach.getAttachment(lookaheadMatch[4]);
			// ELS -------------
			w.nextMatch = this.lookaheadRegExp.lastIndex;
		}
	}
//}}}
//{{{
	// find the formatter for "prettyLink" and replace the handler
	for (var i=0; i<config.formatters.length && config.formatters[i].name!="prettyLink"; i++);
	if (i<config.formatters.length)	{
		config.formatters[i].handler=function(w) {
			this.lookaheadRegExp.lastIndex = w.matchStart;
			var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
			if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
				var e;
				var text = lookaheadMatch[1];
				if(lookaheadMatch[3]) {
					// Pretty bracketted link
					var link = lookaheadMatch[3];
					if (config.macros.attach.isAttachment(link)) {
						e = createExternalLink(w.output,link);
						e.href=config.macros.attach.getAttachment(link);
						e.title=config.macros.attach.linkTooltip+link;
					}
					else e = (!lookaheadMatch[2] && config.formatterHelpers.isExternalLink(link))
						? createExternalLink(w.output,link)
						: createTiddlyLink(w.output,link,false,null,w.isStatic);
				} else {
					e = createTiddlyLink(w.output,text,false,null,w.isStatic);
				}
				createTiddlyText(e,text);
				w.nextMatch = this.lookaheadRegExp.lastIndex;
			}
		}
	} // if "prettyLink" formatter found
	this.initialized=true;
}
//}}}
//{{{
config.macros.attach.init_formatters(); // load time init
//}}}
//{{{
if (TiddlyWiki.prototype.coreGetRecursiveTiddlerText==undefined) {
	TiddlyWiki.prototype.coreGetRecursiveTiddlerText = TiddlyWiki.prototype.getRecursiveTiddlerText;
	TiddlyWiki.prototype.getRecursiveTiddlerText = function(title,defaultText,depth) {
		return config.macros.attach.isAttachment(title)?
			config.macros.attach.getAttachment(title):this.coreGetRecursiveTiddlerText.apply(this,arguments);
	}
}
//}}}
window.oldDisplayMessage = displayMessage;
displayMessage = function (text,linkText)
{ oldDisplayMessage(text,linkText);
setTimeout( 'clearMessage()', 2900 );}
/***
|Name|CalendarPlugin|
|Source|http://www.TiddlyTools.com/#CalendarPlugin|
|Version|1.5.0|
|Author|Eric Shulman|
|Original Author|SteveRumsby|
|License|unknown|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Options|##Configuration|
|Description|display monthly and yearly calendars|
NOTE: For //enhanced// date popup display, optionally install [[DatePlugin]] and [[ReminderMacros]]
!!!Usage:
<<<
|{{{<<calendar>>}}}|full-year calendar for the current year|
|{{{<<calendar year>>}}}|full-year calendar for the specified year|
|{{{<<calendar year month>>}}}|one month calendar for the specified month and year|
|{{{<<calendar thismonth>>}}}|one month calendar for the current month|
|{{{<<calendar lastmonth>>}}}|one month calendar for last month|
|{{{<<calendar nextmonth>>}}}|one month calendar for next month|
|{{{<<calendar +n>>}}}<br>{{{<<calendar -n>>}}}|one month calendar for a month +/- 'n' months from now|
<<<
!!!Configuration:
<<<
|''First day of week:''<br>{{{config.options.txtCalFirstDay}}}|<<option txtCalFirstDay>>|(Monday = 0, Sunday = 6)|
|''First day of weekend:''<br>{{{config.options.txtCalStartOfWeekend}}}|<<option txtCalStartOfWeekend>>|(Monday = 0, Sunday = 6)|

<<option chkDisplayWeekNumbers>> Display week numbers //(note: Monday will be used as the start of the week)//
|''Week number display format:''<br>{{{config.options.txtWeekNumberDisplayFormat }}}|<<option txtWeekNumberDisplayFormat >>|
|''Week number link format:''<br>{{{config.options.txtWeekNumberLinkFormat }}}|<<option txtWeekNumberLinkFormat >>|
<<<
!!!Revisions
<<<
2009.04.31 [1.5.0] rewrote onClickCalendarDate() (popup handler) and added config.options.txtCalendarReminderTags.  Partial code reduction/cleanup.  Assigned true version number (1.5.0)
2008.09.10 added '+n' (and '-n') param to permit display of relative months (e.g., '+6' means 'six months from now', '-3' means 'three months ago'.  Based on suggestion from Jean.
2008.06.17 added support for config.macros.calendar.todaybg
2008.02.27 in handler(), DON'T set hard-coded default date format, so that *customized* value (pre-defined in config.macros.calendar.journalDateFmt is used.
2008.02.17 in createCalendarYear(), fix next/previous year calculation (use parseInt() to convert to numeric value).  Also, use journalDateFmt for date linking when NOT using [[DatePlugin]].
2008.02.16 in createCalendarDay(), week numbers now created as TiddlyLinks, allowing quick creation/navigation to 'weekly' journals (based on request from Kashgarinn)
2008.01.08 in createCalendarMonthHeader(), 'month year' heading is now created as TiddlyLink, allowing quick creation/navigation to 'month-at-a-time' journals
2007.11.30 added 'return false' to onclick handlers (prevent IE from opening blank pages)
2006.08.23 added handling for weeknumbers (code supplied by Martin Budden (see 'wn**' comment marks).  Also, incorporated updated by Jeremy Sheeley to add caching for reminders (see [[ReminderMacros]], if installed)
2005.10.30 in config.macros.calendar.handler(), use 'tbody' element for IE compatibility.  Also, fix year calculation for IE's getYear() function (which returns '2005' instead of '105'). Also, in createCalendarDays(), use showDate() function (see [[DatePlugin]], if installed) to render autostyled date with linked popup.  Updated calendar stylesheet definition: use .calendar class-specific selectors, add text centering and margin settings
2006.05.29 added journalDateFmt handling
<<<
!!!Code
***/
//{{{
version.extensions.CalendarPlugin= { major: 1, minor: 5, revision: 0, date: new Date(2009,5,31)};
//}}}
//{{{
if(config.options.txtCalFirstDay == undefined)
	config.options.txtCalFirstDay = 0;
if(config.options.txtCalStartOfWeekend == undefined)
	config.options.txtCalStartOfWeekend = 5;
if(config.options.chkDisplayWeekNumbers == undefined)
	config.options.chkDisplayWeekNumbers = false;
if(config.options.chkDisplayWeekNumbers)
	config.options.txtCalFirstDay = 0;
if(config.options.txtWeekNumberDisplayFormat == undefined)
	config.options.txtWeekNumberDisplayFormat = 'w0WW';
if(config.options.txtWeekNumberLinkFormat == undefined)
	config.options.txtWeekNumberLinkFormat = 'YYYY-w0WW';
if(config.options.txtCalendarReminderTags == undefined)
	config.options.txtCalendarReminderTags = 'reminder';

config.macros.calendar = {
	monthnames:['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'],
	daynames:['M','T','W','T','F','S','S'],
	todaybg:'#ccccff',
	weekendbg:'#c0c0c0',
	monthbg:'#e0e0e0',
	holidaybg:'#ffc0c0',
	journalDateFmt:'DD MMM YYYY',
	monthdays:[31,28,31,30,31,30,31,31,30,31,30,31],
	holidays:[ ] // for customization see [[CalendarPluginConfig]]
};
//}}}
//{{{
function calendarIsHoliday(date)
{
	var longHoliday = date.formatString('0DD/0MM/YYYY');
	var shortHoliday = date.formatString('0DD/0MM');
	for(var i = 0; i < config.macros.calendar.holidays.length; i++) {
		if(   config.macros.calendar.holidays[i]==longHoliday
		   || config.macros.calendar.holidays[i]==shortHoliday)
			return true;
	}
	return false;
}
//}}}
//{{{
config.macros.calendar.handler = function(place,macroName,params) {
	var calendar = createTiddlyElement(place, 'table', null, 'calendar', null);
	var tbody = createTiddlyElement(calendar, 'tbody');
	var today = new Date();
	var year = today.getYear();
	if (year<1900) year+=1900;

 	// get journal format from SideBarOptions (ELS 5/29/06 - suggested by MartinBudden)
	var text = store.getTiddlerText('SideBarOptions');
	var re = new RegExp('<<(?:newJournal)([^>]*)>>','mg'); var fm = re.exec(text);
	if (fm && fm[1]!=null) { var pa=fm[1].readMacroParams(); if (pa[0]) this.journalDateFmt = pa[0]; }

	var month=-1;
	if (params[0] == 'thismonth') {
		var month=today.getMonth();
	} else if (params[0] == 'lastmonth') {
		var month = today.getMonth()-1; if (month==-1) { month=11; year--; }
	} else if (params[0] == 'nextmonth') {
		var month = today.getMonth()+1; if (month>11) { month=0; year++; }
	} else if (params[0]&&'+-'.indexOf(params[0].substr(0,1))!=-1) {
		var month = today.getMonth()+parseInt(params[0]);
		if (month>11) { year+=Math.floor(month/12); month%=12; };
		if (month<0)  { year+=Math.floor(month/12); month=12+month%12; }
	} else if (params[0]) {
		year = params[0];
		if(params[1]) month=parseInt(params[1])-1;
		if (month>11) month=11; if (month<0) month=0;
	}

	if (month!=-1) {
		cacheReminders(new Date(year, month, 1, 0, 0), 31);
		createCalendarOneMonth(tbody, year, month);
	} else {
		cacheReminders(new Date(year, 0, 1, 0, 0), 366);
		createCalendarYear(tbody, year);
	}
	window.reminderCacheForCalendar = null;
}
//}}}
//{{{
// cache used to store reminders while the calendar is being rendered
// it will be renulled after the calendar is fully rendered.
window.reminderCacheForCalendar = null;
//}}}
//{{{
function cacheReminders(date, leadtime)
{
	if (window.findTiddlersWithReminders == null) return;
	window.reminderCacheForCalendar = {};
	var leadtimeHash = [];
	leadtimeHash [0] = 0;
	leadtimeHash [1] = leadtime;
	var t = findTiddlersWithReminders(date, leadtimeHash, null, 1);
	for(var i = 0; i < t.length; i++) {
		//just tag it in the cache, so that when we're drawing days, we can bold this one.
		window.reminderCacheForCalendar[t[i]['matchedDate']] = 'reminder:' + t[i]['params']['title']; 
	}
}
//}}}
//{{{
function createCalendarOneMonth(calendar, year, mon)
{
	var row = createTiddlyElement(calendar, 'tr');
	createCalendarMonthHeader(calendar, row, config.macros.calendar.monthnames[mon]+' '+year, true, year, mon);
	row = createTiddlyElement(calendar, 'tr');
	createCalendarDayHeader(row, 1);
	createCalendarDayRowsSingle(calendar, year, mon);
}
//}}}
//{{{
function createCalendarMonth(calendar, year, mon)
{
	var row = createTiddlyElement(calendar, 'tr');
	createCalendarMonthHeader(calendar, row, config.macros.calendar.monthnames[mon]+' '+ year, false, year, mon);
	row = createTiddlyElement(calendar, 'tr');
	createCalendarDayHeader(row, 1);
	createCalendarDayRowsSingle(calendar, year, mon);
}
//}}}
//{{{
function createCalendarYear(calendar, year)
{
	var row;
	row = createTiddlyElement(calendar, 'tr');
	var back = createTiddlyElement(row, 'td');
	var backHandler = function() {
		removeChildren(calendar);
		createCalendarYear(calendar, parseInt(year)-1);
		return false; // consume click
	};
	createTiddlyButton(back, '<', 'Previous year', backHandler);
	back.align = 'center';
	var yearHeader = createTiddlyElement(row, 'td', null, 'calendarYear', year);
	yearHeader.align = 'center';
	yearHeader.setAttribute('colSpan',config.options.chkDisplayWeekNumbers?22:19);//wn**
	var fwd = createTiddlyElement(row, 'td');
	var fwdHandler = function() {
		removeChildren(calendar);
		createCalendarYear(calendar, parseInt(year)+1);
		return false; // consume click
	};
	createTiddlyButton(fwd, '>', 'Next year', fwdHandler);
	fwd.align = 'center';
	createCalendarMonthRow(calendar, year, 0);
	createCalendarMonthRow(calendar, year, 3);
	createCalendarMonthRow(calendar, year, 6);
	createCalendarMonthRow(calendar, year, 9);
}
//}}}
//{{{
function createCalendarMonthRow(cal, year, mon)
{
	var row = createTiddlyElement(cal, 'tr');
	createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon], false, year, mon);
	createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon+1], false, year, mon);
	createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon+2], false, year, mon);
	row = createTiddlyElement(cal, 'tr');
	createCalendarDayHeader(row, 3);
	createCalendarDayRows(cal, year, mon);
}
//}}}
//{{{
function createCalendarMonthHeader(cal, row, name, nav, year, mon)
{
	var month;
	if (nav) {
		var back = createTiddlyElement(row, 'td');
		back.align = 'center';
		back.style.background = config.macros.calendar.monthbg;

		var backMonHandler = function() {
			var newyear = year;
			var newmon = mon-1;
			if(newmon == -1) { newmon = 11; newyear = newyear-1;}
			removeChildren(cal);
			cacheReminders(new Date(newyear, newmon , 1, 0, 0), 31);
			createCalendarOneMonth(cal, newyear, newmon);
			return false; // consume click
		};
		createTiddlyButton(back, '<', 'Previous month', backMonHandler);
		month = createTiddlyElement(row, 'td', null, 'calendarMonthname')
		createTiddlyLink(month,name,true);
		month.setAttribute('colSpan', config.options.chkDisplayWeekNumbers?6:5);//wn**
		var fwd = createTiddlyElement(row, 'td');
		fwd.align = 'center';
		fwd.style.background = config.macros.calendar.monthbg; 

		var fwdMonHandler = function() {
			var newyear = year;
			var newmon = mon+1;
			if(newmon == 12) { newmon = 0; newyear = newyear+1;}
			removeChildren(cal);
			cacheReminders(new Date(newyear, newmon , 1, 0, 0), 31);
			createCalendarOneMonth(cal, newyear, newmon);
			return false; // consume click
		};
		createTiddlyButton(fwd, '>', 'Next month', fwdMonHandler);
	} else {
		month = createTiddlyElement(row, 'td', null, 'calendarMonthname', name)
		month.setAttribute('colSpan',config.options.chkDisplayWeekNumbers?8:7);//wn**
	}
	month.align = 'center';
	month.style.background = config.macros.calendar.monthbg;
}
//}}}
//{{{
function createCalendarDayHeader(row, num)
{
	var cell;
	for(var i = 0; i < num; i++) {
		if (config.options.chkDisplayWeekNumbers) createTiddlyElement(row, 'td');//wn**
		for(var j = 0; j < 7; j++) {
			var d = j + (config.options.txtCalFirstDay - 0);
			if(d > 6) d = d - 7;
			cell = createTiddlyElement(row, 'td', null, null, config.macros.calendar.daynames[d]);
			if(d == (config.options.txtCalStartOfWeekend-0) || d == (config.options.txtCalStartOfWeekend-0+1))
				cell.style.background = config.macros.calendar.weekendbg;
		}
	}
}
//}}}
//{{{
function createCalendarDays(row, col, first, max, year, mon) {
	var i;
	if (config.options.chkDisplayWeekNumbers){
		if (first<=max) {
			var ww = new Date(year,mon,first);
			var td=createTiddlyElement(row, 'td');//wn**
			var link=createTiddlyLink(td,ww.formatString(config.options.txtWeekNumberLinkFormat),false);
			link.appendChild(document.createTextNode(
				ww.formatString(config.options.txtWeekNumberDisplayFormat)));
		}
		else createTiddlyElement(row, 'td');//wn**
	}
	for(i = 0; i < col; i++)
		createTiddlyElement(row, 'td');
	var day = first;
	for(i = col; i < 7; i++) {
		var d = i + (config.options.txtCalFirstDay - 0);
		if(d > 6) d = d - 7;
		var daycell = createTiddlyElement(row, 'td');
		var isaWeekend=((d==(config.options.txtCalStartOfWeekend-0)
			|| d==(config.options.txtCalStartOfWeekend-0+1))?true:false);
		if(day > 0 && day <= max) {
			var celldate = new Date(year, mon, day);
			// ELS 10/30/05 - use <<date>> macro's showDate() function to create popup
			// ELS 05/29/06 - use journalDateFmt 
			if (window.showDate) showDate(daycell,celldate,'popup','DD',
				config.macros.calendar.journalDateFmt,true, isaWeekend);
			else {
				if(isaWeekend) daycell.style.background = config.macros.calendar.weekendbg;
				var title = celldate.formatString(config.macros.calendar.journalDateFmt);
				if(calendarIsHoliday(celldate))
					daycell.style.background = config.macros.calendar.holidaybg;
				var now=new Date();
				if ((now-celldate>=0) && (now-celldate<86400000)) // is today?
					daycell.style.background = config.macros.calendar.todaybg;
				if(window.findTiddlersWithReminders == null) {
					var link = createTiddlyLink(daycell, title, false);
					link.appendChild(document.createTextNode(day));
				} else
					var button = createTiddlyButton(daycell, day, title, onClickCalendarDate);
			}
		}
		day++;
	}
}
//}}}
//{{{
// Create a pop-up containing:
// * a link to a tiddler for this date
// * a 'new tiddler' link to add a reminder for this date
// * links to current reminders for this date
// NOTE: this code is only used if [[ReminderMacros]] is installed AND [[DatePlugin]] is //not// installed.
function onClickCalendarDate(ev) { ev=ev||window.event;
	var d=new Date(this.getAttribute('title')); var date=d.formatString(config.macros.calendar.journalDateFmt);
	var p=Popup.create(this);  if (!p) return;
	createTiddlyLink(createTiddlyElement(p,'li'),date,true);
	var rem='\\n\\<\\<reminder day:%0 month:%1 year:%2 title: \\>\\>';
	rem=rem.format([d.getDate(),d.getMonth()+1,d.getYear()+1900]);
	var cmd="<<newTiddler label:[[new reminder...]] prompt:[[add a new reminder to '%0']]"
		+" title:[[%0]] text:{{store.getTiddlerText('%0','')+'%1'}} tag:%2>>";
	wikify(cmd.format([date,rem,config.options.txtCalendarReminderTags]),p);
	createTiddlyElement(p,'hr');
	var t=findTiddlersWithReminders(d,[0,31],null,1);
	for(var i=0; i<t.length; i++) {
		var link=createTiddlyLink(createTiddlyElement(p,'li'), t[i].tiddler, false);
		link.appendChild(document.createTextNode(t[i]['params']['title']));
	}
	Popup.show(); ev.cancelBubble=true; if (ev.stopPropagation) ev.stopPropagation(); return false;
}
//}}}
//{{{
function calendarMaxDays(year, mon)
{
	var max = config.macros.calendar.monthdays[mon];
	if(mon == 1 && (year % 4) == 0 && ((year % 100) != 0 || (year % 400) == 0)) max++;
	return max;
}
//}}}
//{{{
function createCalendarDayRows(cal, year, mon)
{
	var row = createTiddlyElement(cal, 'tr');
	var first1 = (new Date(year, mon, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
	if(first1 < 0) first1 = first1 + 7;
	var day1 = -first1 + 1;
	var first2 = (new Date(year, mon+1, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
	if(first2 < 0) first2 = first2 + 7;
	var day2 = -first2 + 1;
	var first3 = (new Date(year, mon+2, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
	if(first3 < 0) first3 = first3 + 7;
	var day3 = -first3 + 1;

	var max1 = calendarMaxDays(year, mon);
	var max2 = calendarMaxDays(year, mon+1);
	var max3 = calendarMaxDays(year, mon+2);

	while(day1 <= max1 || day2 <= max2 || day3 <= max3) {
		row = createTiddlyElement(cal, 'tr');
		createCalendarDays(row, 0, day1, max1, year, mon); day1 += 7;
		createCalendarDays(row, 0, day2, max2, year, mon+1); day2 += 7;
		createCalendarDays(row, 0, day3, max3, year, mon+2); day3 += 7;
	}
}
//}}}
//{{{
function createCalendarDayRowsSingle(cal, year, mon)
{
	var row = createTiddlyElement(cal, 'tr');
	var first1 = (new Date(year, mon, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
	if(first1 < 0) first1 = first1+ 7;
	var day1 = -first1 + 1;
	var max1 = calendarMaxDays(year, mon);
	while(day1 <= max1) {
		row = createTiddlyElement(cal, 'tr');
		createCalendarDays(row, 0, day1, max1, year, mon); day1 += 7;
	}
}
//}}}
//{{{
setStylesheet('.calendar, .calendar table, .calendar th, .calendar tr, .calendar td { text-align:center; } .calendar, .calendar a { margin:0px !important; padding:0px !important; }', 'calendarStyles');
//}}}
config.options.txtSelectedTiddlerTabButton = "none";
config.options.chkAnimate = false;
config.options.chkInsertTabs = true;
config.options.txtIconsCSS ="";
config.options.txtBackupFolder = "backup";
config.macros.tagging.label="%0";
store.addNotification("UserStyleSheet", refreshStyles);
if (config.macros.calendar != undefined) (config.macros.calendar.todaybg = 'url(http://dl.getdropbox.com/u/55061/TW/img/red50.png)');
if (config.macros.calendar != undefined) (config.macros.calendar.weekendbg= 'url(http://dl.getdropbox.com/u/55061/TW/img/trans10.png)');
if (config.macros.calendar != undefined) (config.macros.calendar.monthbg= 'url(http://dl.getdropbox.com/u/55061/TW/img/trans10.png)');
if (config.macros.calendar != undefined) (config.macros.calendar.holidaybg= 'url(http://dl.getdropbox.com/u/55061/TW/img/trans25.png)');
[[Example tiddler]]
/***
|''Name''|DeprecatedFunctionsPlugin|
|''Description''|Provides support for functions removed from the TiddlyWiki core|
|''Version''|1.0.0|
|''Status''|stable|
|''Source''|http://www.tiddlywiki.com/coreplugins.html#DeprecatedFunctionsPlugin|
|''~CodeRepository:''|http://svn.tiddlywiki.org/Trunk/association/plugins/DeprecatedFunctionsPlugin/DeprecatedFunctionsPlugin.js |
|''License''|[[BSD open source license]]|
|''~CoreVersion''|2.3.0|
|''Feedback''|[[TiddlyWiki community|http://groups.google.com/group/TiddlyWiki]] |
|''Keywords''|legacySupport|
!Code
***/
//{{{
if(!version.extensions.DeprecatedFunctionsPlugin) {
version.extensions.DeprecatedFunctionsPlugin = {installed:true};

//--
//-- Deprecated code
//--

// @Deprecated: Use createElementAndWikify and this.termRegExp instead
config.formatterHelpers.charFormatHelper = function(w)
{
	w.subWikify(createTiddlyElement(w.output,this.element),this.terminator);
};

// @Deprecated: Use enclosedTextHelper and this.lookaheadRegExp instead
config.formatterHelpers.monospacedByLineHelper = function(w)
{
	var lookaheadRegExp = new RegExp(this.lookahead,"mg");
	lookaheadRegExp.lastIndex = w.matchStart;
	var lookaheadMatch = lookaheadRegExp.exec(w.source);
	if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
		var text = lookaheadMatch[1];
		if(config.browser.isIE)
			text = text.replace(/\n/g,"\r");
		createTiddlyElement(w.output,"pre",null,null,text);
		w.nextMatch = lookaheadRegExp.lastIndex;
	}
};

// @Deprecated: Use <br> or <br /> instead of <<br>>
config.macros.br = {};
config.macros.br.handler = function(place)
{
	createTiddlyElement(place,"br");
};

// Find an entry in an array. Returns the array index or null
// @Deprecated: Use indexOf instead
Array.prototype.find = function(item)
{
	var i = this.indexOf(item);
	return i == -1 ? null : i;
};

// Load a tiddler from an HTML DIV. The caller should make sure to later call Tiddler.changed()
// @Deprecated: Use store.getLoader().internalizeTiddler instead
Tiddler.prototype.loadFromDiv = function(divRef,title)
{
	return store.getLoader().internalizeTiddler(store,this,title,divRef);
};

// Format the text for storage in an HTML DIV
// @Deprecated Use store.getSaver().externalizeTiddler instead.
Tiddler.prototype.saveToDiv = function()
{
	return store.getSaver().externalizeTiddler(store,this);
};

// @Deprecated: Use store.allTiddlersAsHtml() instead
function allTiddlersAsHtml()
{
	return store.allTiddlersAsHtml();
}

// @Deprecated: Use refreshPageTemplate instead
function applyPageTemplate(title)
{
	refreshPageTemplate(title);
}

// @Deprecated: Use story.displayTiddlers instead
function displayTiddlers(srcElement,titles,template,unused1,unused2,animate,unused3)
{
	story.displayTiddlers(srcElement,titles,template,animate);
}

// @Deprecated: Use story.displayTiddler instead
function displayTiddler(srcElement,title,template,unused1,unused2,animate,unused3)
{
	story.displayTiddler(srcElement,title,template,animate);
}

// @Deprecated: Use functions on right hand side directly instead
var createTiddlerPopup = Popup.create;
var scrollToTiddlerPopup = Popup.show;
var hideTiddlerPopup = Popup.remove;

// @Deprecated: Use right hand side directly instead
var regexpBackSlashEn = new RegExp("\\\\n","mg");
var regexpBackSlash = new RegExp("\\\\","mg");
var regexpBackSlashEss = new RegExp("\\\\s","mg");
var regexpNewLine = new RegExp("\n","mg");
var regexpCarriageReturn = new RegExp("\r","mg");

}
//}}}
!Sample text
Lorem ipsum dolor sit amet, consectetur adipisici elit, sed eiusmod tempor incidunt ut labore.

!!Formatted text
__Lorem__ //ipsum// @@dolor@@ ''sit'' amet, {{{consectetur}}} ^^adipisici^^ ~~elit,~~ sed eiusmod tempor incidunt ut labore.
To get started with this blank TiddlyWiki, you'll need to modify the following tiddlers:
* SiteTitle & SiteSubtitle: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* MainMenu: The menu (usually on the left)
* TopMenu: Top menu
* DefaultTiddlers: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
----
<<tiddler TiddlyWikiGlass>>
/***
|''Name:''|LoadRemoteFileThroughProxy (previous LoadRemoteFileHijack)|
|''Description:''|When the TiddlyWiki file is located on the web (view over http) the content of [[SiteProxy]] tiddler is added in front of the file url. If [[SiteProxy]] does not exist "/proxy/" is added. |
|''Version:''|1.1.0|
|''Date:''|mar 17, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#LoadRemoteFileHijack|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0|
***/
//{{{
version.extensions.LoadRemoteFileThroughProxy = {
 major: 1, minor: 1, revision: 0, 
 date: new Date("mar 17, 2007"), 
 source: "http://tiddlywiki.bidix.info/#LoadRemoteFileThroughProxy"};

if (!window.bidix) window.bidix = {}; // bidix namespace
if (!bidix.core) bidix.core = {};

bidix.core.loadRemoteFile = loadRemoteFile;
loadRemoteFile = function(url,callback,params)
{
 if ((document.location.toString().substr(0,4) == "http") && (url.substr(0,4) == "http")){ 
 url = store.getTiddlerText("SiteProxy", "/proxy/") + url;
 }
 return bidix.core.loadRemoteFile(url,callback,params);
}
//}}}
/***
|Name|LoadTiddlersPlugin|
|Source|http://www.TiddlyTools.com/#LoadTiddlersPlugin|
|Documentation|http://www.TiddlyTools.com/#LoadTiddlersPluginInfo|
|Version|3.7.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Options|##Configuration|
|Description|macro for automated updates or one-click installations of tiddlers from remote sources|
!!!!!Documentation
>see [[LoadTiddlersPluginInfo]]
!!!!!Configuration
<<<
__password-protected server settings //(optional, if needed)//:__
>username: <<option txtRemoteUsername>> password: <<option txtRemotePassword>>
>{{{usage: <<option txtRemoteUsername>> <<option txtRemotePassword>>}}}
>''note: these settings are also used by [[ExternalTiddlersPlugin]] and [[ImportTiddlersPlugin]]''
<<<
!!!!!Revisions
<<<
2009.05.04 [3.7.0] read CSV file format
|please see [[LoadTiddlersPluginInfo]] for additional revision details|
2005.07.20 [1.0.0] Initial Release
<<<
!!!!!Code
***/
//{{{
version.extensions.LoadTiddlersPlugin= {major: 3, minor: 7, revision: 0, date: new Date(2008,5,4)};

config.macros.loadTiddlers = {
	label: '',
	tip: "add/update tiddlers from '%0'",
	lockedTag: 'noReload',	// if existing tiddler has this tag value, don't overwrite it, even if inbound tiddler is newer
	askMsg: 'Please enter a local path/filename or a remote URL',
	openMsg: 'Opening %0',
	openErrMsg: 'Could not open %0 - error=%1',
	readMsg: 'Read %0 bytes from %1',
	foundMsg: 'Found %0 tiddlers in %1',
	nochangeMsg: "'%0' is up-to-date... skipped.",
	lockedMsg: "'%0' is tagged '%1'... skipped.",
	skippedMsg: 'skipped (cancelled by user)',
	loadedMsg: 'Loaded %0 of %1 tiddlers from %2',
	reportTitle: 'ImportedTiddlers',
	warning: "Warning!!  Processing '%0' as a systemConfig (plugin) tiddler may produce unexpected results! Are you sure you want to proceed?",
	handler: function(place,macroName,params) {
		var label=(params[0] && params[0].substr(0,6)=='label:')?params.shift().substr(6):this.label;
		var tip=(params[0] && params[0].substr(0,7)=='prompt:')?params.shift().substr(7):this.tip;
		var filter='updates';
		if (params[0] && (params[0]=='all' || params[0]=='new' || params[0]=='changes' || params[0]=='updates'
			|| params[0].substr(0,8)=='tiddler:' || params[0].substr(0,4)=='tag:'))
			filter=params.shift();
		var src=params.shift(); if (!src || !src.length) return; // filename is required
		var quiet=(params[0]=='quiet'); if (quiet) params.shift();
		var ask=(params[0]=='confirm'); if (ask) params.shift();
		var force=(params[0]=='force'); if (force) params.shift();
		var init=(params[0]=='init'); if (init) params.shift();
		var nodirty=(params[0]=='nodirty'); if (nodirty) params.shift();
		var norefresh=(params[0]=='norefresh'); if (norefresh) params.shift();
		var noreport=(params[0]=='noreport'); if (noreport) params.shift();
		this.newTags=[]; if (params[0]) this.newTags=params; // any remaining params are used as 'autotags'
		if (label.trim().length) {
			// link triggers load tiddlers from another file/URL and then applies filtering rules to add/replace tiddlers in the store
			createTiddlyButton(place,label.format([src.replace(/%20/g,' ')]),tip.format([src.replace(/%20/g,' ')]), function() {
				if (src=='ask') src=prompt(this.askMsg);
				config.macros.loadTiddlers.loadFile(src,config.macros.loadTiddlers.doImport,{quiet:quiet,ask:ask,filter:filter,force:force,init:init,noreport:noreport});
			})
		}
		else {
			// load tiddlers from another file/URL and then apply filtering rules to add/replace tiddlers in the store
			if (src=='ask') src=prompt(this.askMsg);
			config.macros.loadTiddlers.loadFile(src,config.macros.loadTiddlers.doImport,{quiet:quiet,ask:ask,filter:filter,force:force,init:init,nodirty:nodirty,norefresh:norefresh,noreport:noreport});
		}
	},
	loadFile: function(src,callback,params) {
		var quiet=params.quiet;
		if (src==undefined || !src.length) return null; // filename is required
		if (!quiet) clearMessage();
		if (!quiet) displayMessage(this.openMsg.format([src.replace(/%20/g,' ')]));
		// if working locally and src is not a URL, read from local filesystem
		if (document.location.protocol=='file:' && src.substr(0,5)!='http:' && src.substr(0,5)!='file:') {
			var txt=loadFile(src);
			if (!txt) { // file didn't load, might be relative path.. try fixup
				var pathPrefix=document.location.href;  // get current document path and trim off filename
				var slashpos=pathPrefix.lastIndexOf('/'); if (slashpos==-1) slashpos=pathPrefix.lastIndexOf('\\'); 
				if (slashpos!=-1 && slashpos!=pathPrefix.length-1) pathPrefix=pathPrefix.substr(0,slashpos+1);
				src=pathPrefix+src;
				if (pathPrefix.substr(0,5)!='http:') src=getLocalPath(src);
				var txt=loadFile(src);
			}
			if (!txt) { // file still didn't load, report error
				if (!quiet) displayMessage(this.openErrMsg.format([src.replace(/%20/g,' '),'(unknown)']));
			} else {
				if (!quiet) displayMessage(this.readMsg.format([txt.length,src.replace(/%20/g,' ')]));
				if (callback) callback(true,params,convertUTF8ToUnicode(txt),src,null);
			}
		// otherwise, use XMLHttpRequest to fetch document
		} else {
			var name=config.options.txtRemoteUsername; var pass=config.options.txtRemotePassword;
			var x=doHttp('GET',src,null,null,name,pass,callback,params,null);
		}
	},
	readTiddlersFromHTML: function(html) {
		// for TW2.2+
		if (TiddlyWiki.prototype.importTiddlyWiki!=undefined) {
			var remoteStore=new TiddlyWiki();
			remoteStore.importTiddlyWiki(html);
			return remoteStore.getTiddlers('title');	
		}
	},
	readTiddlersFromCSV: function(CSV) {
		var remoteStore=new TiddlyWiki();
		var lines=CSV.split('\n'); var names=lines[0].split(','); CSV=lines.join('\n')
		// ENCODE commas and newlines within quoted values
		var comma='!~comma~!'; var commaRE=new RegExp(comma,'g');
		var newline='!~newline~!'; var newlineRE=new RegExp(newline,'g');
		CSV=CSV.replace(/\x22((?:[^\x22]|\x22\x22)*?)\x22/g,
			function(x){ return x.substr(1,x.length-2).replace(/\,/g,comma).replace(/\n/g,newline); });
		// PARSE lines
		var lines=CSV.split('\n');
		for (var i=1; i<lines.length; i++) { if (!lines[i].length) continue;
			var values=lines[i].split(',');
			// DECODE commas, newlines and doubled-quotes within quoted values
			for (var v=0; v<values.length; v++)
				values[v]=values[v].replace(commaRE,',').replace(newlineRE,'\n').replace(/\x22\x22/g,'\x22');
			// EXTRACT tiddler values
			var title=''; var text=''; var tags=[]; var fields={};
			var created=null; var when=new Date(); var who=config.options.txtUserName;
			for (var v=0; v<values.length; v++) { var val=values[v];
				if (names[v]) switch(names[v].toLowerCase()) {
					case 'title':	title=val.replace(/\[\]\|/g,'_'); break;
					case 'created': created=new Date(val); break;
					case 'modified':when=new Date(val); break;
					case 'modifier':who=val; break;
					case 'text':	text=val; break;
					case 'tags':	tags=val.readBracketedList(); break;
					default:	fields[names[v].toLowerCase()]=val; break;
				}
			}
			// CREATE tiddler in temporary store
			if (title.length) remoteStore.saveTiddler(title,title,text,who,when,tags,fields,true,created||when);
		}
		return remoteStore.getTiddlers('title');	
	},
	doImport: function(status,params,html,src,xhr) {
		var quiet=params.quiet;
		var ask=params.ask;
		var filter=params.filter;
		var force=params.force;
		var init=params.init;
		var nodirty=params.nodirty;
		var norefresh=params.norefresh;
		var noreport=params.noreport;
		var tiddlers = config.macros.loadTiddlers.readTiddlersFromHTML(html);
		if (!tiddler||!tiddlers.length) tiddlers=config.macros.loadTiddlers.readTiddlersFromCSV(html);
		var count=tiddlers?tiddlers.length:0;
		var querypos=src.lastIndexOf('?'); if (querypos!=-1) src=src.substr(0,querypos);
		if (!quiet) displayMessage(config.macros.loadTiddlers.foundMsg.format([count,src.replace(/%20/g,' ')]));
		var wasDirty=store.isDirty();
		store.suspendNotifications();
		var count=0;
		if (tiddlers) for (var t=0;t<tiddlers.length;t++) {
			var inbound = tiddlers[t];
			var theExisting = store.getTiddler(inbound.title);
			if (inbound.title==config.macros.loadTiddlers.reportTitle)
				continue; // skip 'ImportedTiddlers' history from the other document...
			if (theExisting && theExisting.tags.contains(config.macros.loadTiddlers.lockedTag)) {
				if (!quiet) displayMessage(config.macros.loadTiddlers.lockedMsg.format([theExisting.title,config.macros.loadTiddlers.lockedTag]));
				continue; // skip existing tiddler if tagged with 'noReload'
			}
			// apply the all/new/changes/updates filter (if any)
			if (filter && filter!='all') {
				if ((filter=='new') && theExisting) // skip existing tiddlers
					continue;
				if ((filter=='changes') && !theExisting) // skip new tiddlers
					continue;
				if ((filter.substr(0,4)=='tag:') && inbound.tags.indexOf(filter.substr(4))==-1) // must match specific tag value
					continue;
				if ((filter.substr(0,8)=='tiddler:') && inbound.title!=filter.substr(8)) // must match specific tiddler name
					continue;
				if (!force && store.tiddlerExists(inbound.title) && ((theExisting.modified.getTime()-inbound.modified.getTime())>=0)) {
					var msg=config.macros.loadTiddlers.nochangeMsg;
					if (!quiet&&msg.length) displayMessage(msg.format([inbound.title]));
					continue;
				}
			}
			// get confirmation if required
			if (ask && !confirm((theExisting?'Update':'Add')+" tiddler '"+inbound.title+"'\nfrom "+src.replace(/%20/g,' ')+'\n\nOK to proceed?'))
				{ tiddlers[t].status=config.macros.loadTiddlers.skippedMsg; continue; }
			// DO IT!
			var tags=new Array().concat(inbound.tags,config.macros.loadTiddlers.newTags);
	                store.saveTiddler(inbound.title, inbound.title, inbound.text, inbound.modifier, inbound.modified, tags, inbound.fields, true, inbound.created);
	                store.fetchTiddler(inbound.title).created = inbound.created; // force creation date to imported value - needed for TW2.1.3 or earlier
			tiddlers[t].status=theExisting?'updated':'added'
			if (init && tags.contains('systemConfig') && !tags.contains('systemConfigDisable')) {
				var ok=true;
				if (ask||!quiet) ok=confirm(config.macros.loadTiddlers.warning.format([inbound.title]))
				if (ok) { // run the plugin
					try { window.eval(inbound); tiddlers[t].status+=' (plugin initialized)'; }
					catch(ex) { displayMessage(config.messages.pluginError.format([exceptionText(ex)])); }
				}
			}
			count++;
		}
		store.resumeNotifications();
		if (count) {
			// optionally: set/clear 'unsaved changes' flag, refresh page display, and generate a report
			store.setDirty(wasDirty||!nodirty);
			if (!norefresh) {
				story.forEachTiddler(function(t,e){if(!story.isDirty(t))story.refreshTiddler(t,null,true)});
				store.notifyAll();
			}
			if (!noreport) config.macros.loadTiddlers.report(src,tiddlers,count,quiet);
		}
		// always show final message when tiddlers were actually loaded
		if (!quiet||count) displayMessage(config.macros.loadTiddlers.loadedMsg.format([count,tiddlers.length,src.replace(/%20/g,' ')]));
	},
	report: function(src,tiddlers,count,quiet) {
		// format the new report content
		var newText = 'On '+(new Date()).toLocaleString()+', ';
		newText += config.options.txtUserName+' loaded '+count+' tiddlers ';
		newText += 'from\n[['+src+'|'+src+']]:\n';
		newText += '<<<\n';
		for (var t=0; t<tiddlers.length; t++)
			if (tiddlers[t].status)
				newText += '#[['+tiddlers[t].title+']] - '+tiddlers[t].status+'\n';
		newText += '<<<\n';
		// get current report (if any)
		var title=config.macros.loadTiddlers.reportTitle;
		var currText='';
		var theReport = store.getTiddler(title);
		if (theReport) currText=((theReport.text!='')?'\n----\n':'')+theReport.text;
		// update the ImportedTiddlers content and show the tiddler
		store.saveTiddler(title, title, newText+currText, config.options.txtUserName, new Date(), theReport?theReport.tags:null, theReport?theReport.fields:null);
		if (!quiet) { story.displayTiddler(null,title,1,null,null,false); story.refreshTiddler(title,1,true); }
	}
}
//}}}
@@display:block;text-align:center;TW Glass Demo Page@@ @@display:block;text-align:center;[img[http://dl.getdropbox.com/u/55061/TW/images/demo.png]]@@ <<slider chkSliderOptionsPanel OptionsPanel "options »" "Change TiddlyWiki advanced options">>
<<calendar thismonth>><<timeline modified 12>>
<<<
^^[[www.tiddlysoft.com|http://www.tiddlysoft.com]]^^
<<<
<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<link rel="shortcut icon" href="[[favicon.gif]]">
<!--}}}-->
<!--{{{-->
<!-- <div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'> -->
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
<div class='TopMenu' refresh='content' tiddler='TopMenu'></div>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' force='true' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
/***
|''Name:''|PasswordOptionPlugin|
|''Description:''|Extends TiddlyWiki options with non encrypted password option.|
|''Version:''|1.0.2|
|''Date:''|Apr 19, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#PasswordOptionPlugin|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0 (Beta 5)|
***/
//{{{
version.extensions.PasswordOptionPlugin = {
	major: 1, minor: 0, revision: 2, 
	date: new Date("Apr 19, 2007"),
	source: 'http://tiddlywiki.bidix.info/#PasswordOptionPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	license: '[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D]]',
	coreVersion: '2.2.0 (Beta 5)'
};

config.macros.option.passwordCheckboxLabel = "Save this password on this computer";
config.macros.option.passwordInputType = "password"; // password | text
setStylesheet(".pasOptionInput {width: 11em;}\n","passwordInputTypeStyle");

merge(config.macros.option.types, {
	'pas': {
		elementType: "input",
		valueField: "value",
		eventName: "onkeyup",
		className: "pasOptionInput",
		typeValue: config.macros.option.passwordInputType,
		create: function(place,type,opt,className,desc) {
			// password field
			config.macros.option.genericCreate(place,'pas',opt,className,desc);
			// checkbox linked with this password "save this password on this computer"
			config.macros.option.genericCreate(place,'chk','chk'+opt,className,desc);			
			// text savePasswordCheckboxLabel
			place.appendChild(document.createTextNode(config.macros.option.passwordCheckboxLabel));
		},
		onChange: config.macros.option.genericOnChange
	}
});

merge(config.optionHandlers['chk'], {
	get: function(name) {
		// is there an option linked with this chk ?
		var opt = name.substr(3);
		if (config.options[opt]) 
			saveOptionCookie(opt);
		return config.options[name] ? "true" : "false";
	}
});

merge(config.optionHandlers, {
	'pas': {
 		get: function(name) {
			if (config.options["chk"+name]) {
				return encodeCookie(config.options[name].toString());
			} else {
				return "";
			}
		},
		set: function(name,value) {config.options[name] = decodeCookie(value);}
	}
});

// need to reload options to load passwordOptions
loadOptionsCookie();

/*
if (!config.options['pasPassword'])
	config.options['pasPassword'] = '';

merge(config.optionsDesc,{
		pasPassword: "Test password"
	});
*/
//}}}
//{{{
config.macros.referenced = {};
config.macros.referenced.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
 var tiddlers = store.getReferringTiddlers(tiddler.title);
 var titems = createTiddlyElement(place,"ul");
 for(var t=0; t<tiddlers.length; t++)
 if (!params[0] || tiddlers[t].tags.contains(params[0]))
 createTiddlyLink(createTiddlyElement(titems,"li"),tiddlers[t].title,true);
}
//}}}
/***
|Name|SetIconPlugin|
|Source|http://www.TiddlyTools.com/#SetIconPlugin|
|Documentation|http://www.TiddlyTools.com/#SetIconPluginInfo|
|Version|1.8.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.3|
|Type|plugin|
|Requires||
|Overrides||
|Options|##Configuration|
|Description|add an image to a toolbar, macro, or slider link|
!!!!!Documentation
>see [[SetIconPluginInfo]]
!!!!!Configuration
<<<
<<option chkIconsShowImage>> show images on links
<<option chkIconsShowText>> include link text with images
default image style: {{stretch{<<option txtIconsCSS>>}}}
<<<
!!!!!Revisions
<<<
2008.05.11 [1.8.0] added optional 'notext' value for iconpos to force text to be hidden for specific links
| see [[SetIconPluginInfo]] for additional revision details |
2008.05.09 [1.0.0] initial release (as inline script)
<<<
!!!!!Code
***/
//{{{
version.extensions.SetIconPlugin= {major: 1, minor: 8, revision: 0, date: new Date(2008,5,11)};

if (config.options.chkIconsShowImage===undefined)
	config.options.chkIconsShowImage=true;
if (config.options.chkIconsShowText===undefined)
	config.options.chkIconsShowText=true;
if (config.options.txtIconsCSS===undefined)
	config.options.txtIconsCSS="vertical-align:middle;width:auto;height:auto";

config.macros.setIcon = {
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		if (!config.options.chkIconsShowImage) return; // text-only - do nothing
		if (!params[0]) return; // no image src specified - do nothing

		// find nearest link element
		var btn=place.lastChild; // look for sibling link
		while (btn && btn.nodeName!="A") btn=btn.previousSibling;
		if (!btn) { // look for child link
			var links=place.getElementsByTagName("A");
			if (links.length) btn=links[links.length-1];
		}
		if (!btn) { // look for parent link
			var btn=place.parentNode.lastChild;
			while (btn && btn.nodeName!="A") btn=btn.previousSibling;
		}
		if (!btn) { // look for cousin link
			var links=place.parentNode.getElementsByTagName("A");
			if (links.length) btn=links[links.length-1];
		}
		if (!btn) return; // can't find a link - do nothing

		// set icon and command text/tip
		var txt=btn.innerHTML;
		var src=params[0];  // default to direct URL
		if (config.macros.attach && config.macros.attach.isAttachment(src))
			src=config.macros.attach.getAttachment(src); // retrieve attachment (if any)
		var css=params[1]; if (!css||!css.length) css=config.options.txtIconsCSS;
		var after=params[2]&&params[2].toUpperCase()=="RIGHT";
		var notext=params[2]&&params[2].toUpperCase()=="NOTEXT";
		btn.innerHTML="<img src='"+src+"' style='"+css+"'>";
		if (config.options.chkIconsShowText && !notext)
			btn.innerHTML=after?txt+btn.innerHTML:btn.innerHTML+txt;
		else
			btn.title=txt.toUpperCase()+": "+btn.title; // add text to tooltip

		// adjust nested slider button text/tip
		if (btn.getAttribute("closedtext")!=null) {
			btn.setAttribute("closedtext",btn.innerHTML);
			btn.setAttribute("openedtext",btn.innerHTML);
			if (!config.options.chkIconsShowText || notext) {
				btn.setAttribute("closedtip",txt.toUpperCase()+": "+btn.getAttribute("closedtip"));
				btn.setAttribute("openedtip",txt.toUpperCase()+": "+btn.getAttribute("openedtip"));
			}
		}
	}
};
//}}}
<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal "DD MMM YYYY" "journal">><<saveChanges>><<tiddler TspotSidebar>><<slider chkSliderOptionsPanel OptionsPanel "options »" "Change TiddlyWiki advanced options">>
<<tabs txtMainTab "Timeline" "Timeline" TabTimeline "All" "All tiddlers" TabAll "Tags" "All tags" TabTags "More" "More lists" TabMore>>

TW Glass demo page
/*{{{*/
body {background: url([[background.jpg]]);}
div[tags~="systemConfig"].tiddler {background: url([[background2.jpg]]);}

* html .tiddler {	height:1%;}

#displayArea {margin:0em 13em 0em 16em;}
#contentWrapper {display:block;}
#splashScreen {display:none;}
#taggerDrpBtn {font-family: "Lucida Grande" verdana;
		text-transform: uppercase;
		font-size: .85em;
		font-weight: bold;}

a:focus {outline:none;}
a {color: #eee;text-decoration:none;}
a img {border:0;}
a:hover {background-color:transparent; color:#F7C898;}

.txtOptionInput {width: 11.5em;
			font-family: "Lucida Grande" Tahoma, Arial;
			font-size: 1em;
			border: 1px solid transparent;
			-moz-border-radius: 6px;
			-webkit-border-radius: 6px;
			background: #fff url(img/lupa.gif) no-repeat top left;
			padding-left: 2em;}



.tiddler {padding:0em 0em 0em 0em;
		background-color: transparent;
		margin-top: .6em;
		-moz-border-radius: 4px;
		-webkit-border-radius: 4px;
		margin-bottom: .5em;} 

.tiddler img 	{background-color: #fff;
		padding:6px;	
		margin: 8px;
		background: url([[trans25.png]]);
		}

.tiddler input {background: url([[trans25.png]]);
		color: #F7C898;
		margin: .25em; padding: 0;
		-moz-border-radius: 2px;
		-webkit-border-radius: 2px;
		}

.tiddler .tagging {margin-left: 1em;}

.shadow .title {color:white;}

body {font-size: .85em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:normal; text-decoration:none; font-family: "Lucida Grande", Arial;
		   color: #F7c898; background:transparent;
                   }

h1,h2,h3 {padding-bottom:1px; margin-top:.25em;margin-bottom:0.25em;border:none;}
h4,h5,h6 {margin-top:1em;margin-bottom:0.25em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}
h6 {font-size:.9em;}

br + h1, br + h2, br + h3 {margin-top: -.4em;}

ul+br+h1, ol+br+h1 {margin-top: -1em;}
ul+br+h2, ol+br+h1 {margin-top: -1em;}
ul+br+h3, ol+br+h1 {margin-top: -1em;}

ul, ol {margin: .2em 0;}

li {padding-bottom: .35em;}
dd {margin-left: 1.5em;}

.button		{color: white;
                 border: 1px dotted #f7c898;}

.twtable tr { vertical-align:top; } 

.listTitle 	{color: #f7c898}

.tabset {padding:1em 0em 0em 0.5em; }

.tab, .viewer .tab {margin:0em 0em 0em 0.25em;
	padding:2px;
	font-family: "Lucida Grande", Arial;
	font-size: .95em;
	background: url([[transblack25.png]]);}

.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li, wiewer .txtMainTab .tabContents li {list-style:none;color: #F7C898;}
.tabContents li.listLink, wiewer .tabContents li.listLink { margin-left:.75em;color: white;}

.tabSelected, .viewer .tabSelected {color:white;
	border-left:1px solid white;
	border-top:1px solid white;
	border-right:1px solid white;
	background: url([[transblack25.png]]);
	}

.tabUnselected, .viewer .tabUnselected {color:[[ColorPalette::Background]];
					background: url([[transblack25.png]]);}
.tabContents, .viewer .tabContents {color:white;
		border:1px solid white;
		padding:0.5em;
		background: url([[transblack25.png]]);}

.tabContents .button {border:0;}

.title {	font-size:1.45em;
		font-family: "Lucida Grande", Arial;
		background: url([[trans25.png]]);
		color: white;
		padding-left: .4em;
		margin-top: 1px;}


.subtitle {font-size:0.45em;
		font-family:"Lucida Grande", helvetica;
		color: white;
		float: right;
		padding: 0.15em 0.6em 0.4em 0em;
		text-align: right;}

.toolbar {	text-align:right;
		font-size:.95em;
		padding-bottom: .3em;
		padding-top: .3em;
		background: url([[toolbar50.png]]) no-repeat 0px -1px;	
		font-family: "Lucida Grande" verdana; arial;
		color: white;}

.toolbar a {	border: 1px solid transparent;color: #fff;}

.selected .toolbar a {color:#fff;}
.selected .toolbar a:hover {color:#000;}

.toolbar .toolbaraction * {float: left;
		margin: 0 0 0 4px;
		padding: 0;
		border: none;
		cursor: default;
		background-image: none;}

.toolbar .toolbaraction .button:hover {border: none;
				background: url([[x.gif]]) 3px 0px no-repeat;
				background-color: none;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.5em;
		padding: .5em .5em .5em .8em;
		font-family: "Lucida Grande", Tahoma;
		font-size: .85em;
		text-align: justify;
		color: white;
		background: url([[transblack25.png]]);
		}

.viewer .tiddlyLinkExisting {border-bottom: 1px dotted #F7C898;font-weight:normal;}

.viewer .button {margin:0 0.25em; padding:0 0.25em;
                 color: white;
                 border: 1px dotted #f7c898;}

.viewer .button:hover {background: none;color: #f7c898; border: 1px solid #f7c898;}

.viewer blockquote {line-height: 1.6em;
		margin: .3em;
		padding: .2em 1em .2em 1.5em;
		background: url([[trans10.png]]);
		border: none;
		overflow: auto;}

.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em; list-style-position: inside;}

.viewer li {text-align: left;}

.viewer table, table.twtable {border-collapse:collapse;
				margin:0.8em 1.0em;
				border: 1px solid white;
				background: url([[trans10.png]])
				}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th,
.twtable td, .twtable tr,.twtable caption {padding:3px;}

table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}

.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:url([[trans25.png]]);
			border:1px solid white; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid white;}


.viewer pre {	padding:0.5em;
		margin-left:0.5em;
		font-size:1.4em;
		line-height:1.4em; overflow:auto;
		border:1px solid #F7C898;
		background: url([[trans10.png]]);
		}

.viewer code {font-size:1.3em; line-height:1.4em;
		color: #F7C898;
		background: url([[transblack25.png]]);}

.viewer .tabset {
	font-family: "Lucida Grande", Arial;
	font-size: 1.1em;
	font-weight: bold;
	margin: .3em;
	border: none;}

.viewer .tabSelected {background: url([[trans10.png]]);
			margin: 0em 0em 0em 0.25em;
			padding: .3em .5em .3em .5em;
			}

.viewer .tabUnselected {background: none;
			margin: 0em 0em 0em 0.25em;
			padding: .3em .5em .3em .5em;}

.viewer .tabContents {background: url([[trans10.png]]); overflow: auto;}

.sectionTOC {	margin: .4em .4em .4em 1em; padding-right: 1em;
		float:right;
                -moz-border-radius: 4px;
		-webkit-border-radius: 4px;
                background: url([[trans10.png]]);
		font-family: verdana, Arial, tahoma;
		clear: right;
                }

.viewer .sectionTOC ol {padding: .1em 0 .1em 0;}
.viewer .sectionTOC ol li {margin-left: .5em;
                           padding: .1em .1em .1em .1em;}

.header {position:relative;}

.headerShadow {color:[[ColorPalette::Foreground]];
		border-bottom: 1px solid #fff;
		background-image: url([[trans50.png]]);
		position:relative; height: 52px;
		padding: 0em 0em 0em 0em;
		left:0px; top:0px;text-align: center;
		}

.headerForeground {display:none; height: 52px; position:absolute;
		padding:.3em 0em .1em .1em; left:0px; top:0px;
		text-align: center;
		background: url([[trans25.png]]);}

.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];
			border-bottom: 1px solid [[ColorPalette::BordeFosc]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.header a:hover {background:transparent;}

.siteTitle {font-weight: bold;}
.siteTitle, .siteSubtitle {font-size:1em;color: #000;font-family: "Lucida Grande", helvetica;
		padding: .4em 0 .4em 0;
		color: #fff;}

.TopMenu	{font-family: "Lucida Grande", Arial;
		font-size: .9em;
		margin-top: .45em;
		}

.TopMenu a  {	font-style:normal;
		font-family: "Lucida Grande", Arial;
		padding: .1em .5em .1em .5em;
		margin: 0 .15em 0 .15em;
		-moz-border-radius: 4px;
		-webkit-border-radius: 4px;
		border: 1px solid transparent;
		background: url([[trans10.png]]);
		}

.TopMenu ul, .TopMenu li {display: inline;
		padding-top: 0;}

.TopMenu img {vertical-align: text-bottom;}

.TopMenu a:hover {	background: url([[transblack25.png]]);
			cursor: default;
			color: white;
			border-top: 1px solid #5d5d5d;
			border-left: 1px solid #5d5d5d;
			}

.TopMenu .button {	border: 1px solid transparent;
			}

.TopMenu input 	{	width: 9em;
			font-family: "Lucida Grande" Tahoma, Arial;
			border: 1px solid transparent;
			-moz-border-radius: 4px;
			-webkit-border-radius: 4px;
			background: url([[translupa50.png]]);
			padding-left: 1.5em;}

.TopMenu a.tiddlyLinkNonExisting.shadow {font-weight:normal;}

#mainMenu 	{position:absolute;
		left:0;
		width: 14em;
		text-align:left;
		font-family: "Lucida Grande" Tahoma, Arial;
		font-size: .9em;
		margin-left: .6em;
		color: white;
		}

#mainMenu a { 	cursor: default;
                border: 1px solid transparent;
		border-bottom: 1px dotted #F7C898;
                text-decoration: none;
		}

#mainMenu .button {border: 1px solid transparent; 
		font-weight: normal;
		background: url([[transblack10.png]]);
		color: #f7c898;
		margin: 0 4px 0 0;
		padding: 0 2px 0 2px;}


#mainMenu a:hover {border-bottom: 1px dotted #F7C898;}
#mainMenu .button:hover {border-bottom: 1px solid transparent;}

#mainMenu .sliderPanel {padding-left: 1.2em;background: url([[transblack10.png]]);
			margin-bottom: -1em;} 
#mainMenu .sliderPanel a {line-height: 1.8em;}
#mainMenu .sliderPanel a:hover {border-bottom: 1px solid #F7C898;}

#mainMenu blockquote {margin: 0;padding: 0 0 0 1.2em;}

#mainMenu .listTitle {font-size: 1em;
		margin-top: .8em;
		padding: .25em 0 0 0;
		background: url([[transblack10.png]]);
		}

#mainMenu ul	{margin: 0; padding: 0;
		background: url([[transblack10.png]]);
		} 

#mainMenu li {	list-style-type: none;
		padding: .1em 0 .1em 1.2em;
		}

#mainMenu li a {border-bottom: 1px dotted #F7C898;
		background: none;display: block;
		}

#mainMenu li a:hover {	border-bottom: 1px solid #F7C898;
			border-top: 1px solid transparent;
			border-left: 1px solid transparent;
			border-right: 1px solid transparent;
			}

#sidebar {display: none; position:absolute; right:8px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:1.3em;}
#sidebarOptions a {margin:0em 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 .3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.tabSelected{color: #F7C898;
	background:[[ColorPalette::MenuBlau]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]];
		background:[[ColorPalette::TertiaryMid]];}
.tabContents {	color:[[ColorPalette::PrimaryDark]];
		background:[[ColorPalette::MenuBlau]];
		border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}

.tagged {	margin: -4.2em 0 0 0;  /*beta abans: 2.6*/
		float:right;
		font-family: "Lucida Grande", Arial;
		right: 1em;            /*beta abans: 2*/
		position:absolute; /*beta*/
		max-width: 13em;
		overflow: hidden;} 

.tagging ul, .tagged ul {list-style:none; margin:0.2em; padding:0;}
.tagClear {clear:both;}


.tagging, .tagged {font-size:0.9em; padding:0.2em;
		border: none;
		background: none;}

.selected .tagging, .selected .tagged {background: none;
					border: none;}

.tagging .listTitle, .tagged .listTitle {display: none; color:white; /* BETA */}
.tagging .button, .tagged .button {border: none;
				display:block;
				color: #F7C898;}

.referenced {	background: url([[transblack10.png]]);margin-bottom: .4em;}

.referenced a {	display: block;
		font-family: arial, helvetica;
		font-weight: normal;
		padding: .2em;
		border-bottom: 1px dotted #F7C898;
		width: 10.6em;
		overflow: hidden;
		}

.annotation {display: none;}


#messageArea {position:fixed;
		top:0em;
		left: 1em;
		width: 13.7em;
		margin:0em;
		padding:0.5em; z-index:2000; _position:absolute;
		background: url([[minitoolbar75.png]]) no-repeat;
		border: none;
		font-family: "Lucida Grande" arial;
		font-size: .85em;
		-moz-border-radius: 0 0 2px 2px;
		-webkit-border-radius: 0 0 2px 2px;
		}
.messageToolbar {display:block; text-align:right; padding:0.9em 0.2em 0.2em 0.2em}
#messageArea a {text-decoration:underline;color: #000;}

.tiddlerPopupButton {padding:0.2em 0.2em 0.2em 0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em 1em 1em 1em; margin:0;
		background:url([[trans75.png]]); border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:url([[trans90.png]]);
	color: #000;
	border: 1px solid white;
	position:absolute; z-index:300;
	font-size:.85em;
	font-family: "Lucida Grande" verdana;
	padding:0; list-style:none; margin:0;}

.popup hr {	color: [[ColorPalette::PrimaryDark]];
		background:[[ColorPalette::PrimaryDark]];
		border-bottom:1px;
		}


.popup li {	/*border-top: 1px solid white;*/
		/*border-bottom: 1px solid white;*/
		margin: .25em 0 .25em 0;
		padding: 0;
		/*background: url([[trans75.png]]);*/}

.popup li a {display:block; padding:0.2em; font-weight:normal; cursor:pointer;
		}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]];
		}
.popup li a:hover {background: [[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];
		}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]];
		}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid #FF7B76;}



.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0em;}
.popup li.disabled {padding:0.4em;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.popup th {color: #000;}


.highlight {background: url([[transblack25.png]]);
	border-bottom: 1px solid #007800;}

.marked {background: url([[red50.png]]);
	color: #FFF5AE;
	/*padding: 0 .25em 0 .25em;*/ }

#backstageArea {background: #000;
		color: white;
		}
#backstagePanel {background: url([[red50.png]]);
		border-color: [[ColorPalette::Background]]
		[[ColorPalette::TertiaryDark]]
		[[ColorPalette::TertiaryDark]]
		[[ColorPalette::TertiaryDark]];
		}
.wizard {	background: url([[transblack25.png]]);
		border:1px solid white;
		}

.wizard input {background: url([[transblack25.png]]);color: white;}

.wizard h1 {color:white; border:none;}
.wizard h2 {color:white; border:none;}
.wizardStep {background: url([[transblack50.png]]);
		color: white;
		border:1px solid #000;}
.wizardFooter {background: none;}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}

.editor {font-size: 1.1em;}
.editor input, .editor textarea {display:block; font:inherit;}
.editorFooter {padding:0.25em 0em; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

.editor input {background: url([[trans75.png]]);
		font-weight:bold;
		border:none;
		color: #000;}

.editor textarea {background: url([[trans75.png]]);
		width:100%;
		border: none;
		font-family: monospaced, "Courier New", helvetica;
		font-size: .8em}

.editorFooter {color:#F7C898;}
.editorFooter .button {margin:0 0.25em; padding:0 0.25em;}

/* CALENDAR */
.calendarMonthname .tiddlyLink {color: #F7C898;}

.viewer .calendar {border: none; background: none;}
.viewer .calendar td {border-color: #ccc;}
.viewer .calendar .button {color: #F7C898;border: none;}
.viewer .calendar .tiddlyLink {font-style: normal;border-bottom: none;}
.viewer .calendar .tiddlyLinkExisting {color: #F7C898;}

#mainMenu .calendar .tiddlyLink {border-bottom: none;}
#mainMenu .calendar .tiddlyLinkExisting {font-weight: bold;color: #F7C898;}
#mainMenu .calendar a {background: none;cursor: pointer;}
#mainMenu .calendar td {padding: 0 3px 0 3px; width: 20px;}
#mainMenu .calendar {background: url([[transblack10.png]]);
			font-weight: bold;
			font-family: "Lucida Grande", Tahoma, Arial;
			font-size: 11px;}
/* CALENDAR  */

/*}}}*/
/*{{{*/
#tiddlersBar {		text-align: center;
			margin-top: .2em;
			line-height: 1.4em;
			padding: .3em 0 .2em 0;}

#tiddlersBar .button {border: 0; color: #ddd;}

#tiddlersBar .button:hover {color: white;
			background: none;
			}

#tiddlersBar .tab {white-space:nowrap; border: none;
			}

#tiddlersBar .tabSelected 	{background: url([[ministar.png]]) left no-repeat;
				color: white;
				border: 1px solid transparent;
				-moz-border-radius: 4px 4px 4px 4px;
				-webkit-border-radius: 4px 4px 4px 4px;
				padding-left: 1.1em;
				}

#tiddlersBar .tabButton {color: transparent;
			padding-left: .8em;
			background: url([[close.png]]) right no-repeat;
			}

#tiddlersBar .tabUnselected {
			background: url([[ministarbn.png]]) left no-repeat;
			padding-left: 1.1em;
			border: 1px solid transparent;}

#tiddlersBar .tabUnselected .tabButton {background: url([[closebn.png]]) right no-repeat;}

.tabUnselected .tabButton, .tabSelected .tabButton {padding : 0 2px 0 2px}
.tiddler, .tabContents {border: 1px solid white;
			-moz-border-radius: 4px 4px 4px 4px;
			-webkit-border-radius: 4px 4px 4px 4px;}
/*}}}*/
<<list all>>
/***
|''Name:''|~TaggerPlugin|
|''Version:''|1.0.1 (2006-06-01)|
|''Source:''|http://tw.lewcid.org//#TaggerPlugin|
|''Author:''|SaqImtiaz|
|''Description:''|Provides a drop down listing current tiddler tags, and allowing toggling of tags.|
|''Documentation:''|[[TaggerPluginDocumentation]]|
|''Source Code:''|[[TaggerPluginSource]]|
|''~TiddlyWiki:''|Version 2.0.8 or better|
***/
// /%
config.tagger={defaults:{label:"Tags: ",tooltip:"Manage tiddler tags",taglist:"true",excludeTags:"",notags:"tiddler has no tags",aretags:"current tiddler tags:",toggletext:"add tags:"}};config.macros.tagger={};config.macros.tagger.arrow=(document.all?"â–¼":"â–¾");config.macros.tagger.handler=function(_1,_2,_3,_4,_5,_6){var _7=config.tagger.defaults;var _8=_5.parseParams("tagman",null,true);var _9=((_8[0].label)&&(_8[0].label[0])!=".")?_8[0].label[0]+this.arrow:_7.label+this.arrow;var _a=((_8[0].tooltip)&&(_8[0].tooltip[0])!=".")?_8[0].tooltip[0]:_7.tooltip;var _b=((_8[0].taglist)&&(_8[0].taglist[0])!=".")?_8[0].taglist[0]:_7.taglist;var _c=((_8[0].exclude)&&(_8[0].exclude[0])!=".")?(_8[0].exclude[0]).readBracketedList():_7.excludeTags.readBracketedList();if((_8[0].source)&&(_8[0].source[0])!="."){var _d=_8[0].source[0];}if(_d&&!store.getTiddler(_d)){return false;}var _e=function(e){if(!e){var e=window.event;}var _11=Popup.create(this);var _12=store.getTags();var _13=new Array();for(var i=0;i<_12.length;i++){_13.push(_12[i][0]);}if(_d){var _15=store.getTiddler(_d);_13=_15.tags.sort();}var _16=_6.tags.sort();var _17=function(_18,_19,_1a){var sp=createTiddlyElement(createTiddlyElement(_11,"li"),"span",null,"tagger");var _1c=createTiddlyButton(sp,_18,_1a+" '"+_19+"'",taggerOnToggle,"button","toggleButton");_1c.setAttribute("tiddler",_6.title);_1c.setAttribute("tag",_19);insertSpacer(sp);if(window.createTagButton_orig_mptw){createTagButton_orig_mptw(sp,_19)}else{createTagButton(sp,_19);}};createTiddlyElement(_11,"li",null,"listTitle",(_6.tags.length==0?_7.notags:_7.aretags));for(var t=0;t<_16.length;t++){_17("[x]",_16[t],"remove tag ");}createTiddlyElement(createTiddlyElement(_11,"li"),"hr");if(_b!="false"){createTiddlyElement(_11,"li",null,"listTitle",_7.toggletext);for(var i=0;i<_13.length;i++){if(!_6.tags.contains(_13[i])&&!_c.contains(_13[i])){_17("[ ]",_13[i],"add tag ");}}createTiddlyElement(createTiddlyElement(_11,"li"),"hr");}var _1f=createTiddlyButton(createTiddlyElement(_11,"li"),("Create new tag"),null,taggerOnToggle);_1f.setAttribute("tiddler",_6.title);if(_d){_1f.setAttribute("source",_d);}Popup.show(_11,false);e.cancelBubble=true;if(e.stopPropagation){e.stopPropagation();}return (false);};createTiddlyButton(_1,_9,_a,_e,"button","taggerDrpBtn");};window.taggerOnToggle=function(e){var tag=this.getAttribute("tag");var _22=this.getAttribute("tiddler");var _23=store.getTiddler(_22);if(!tag){var _24=prompt("Enter new tag:","");if(_24!=""&&_24!=null){var tag=_24;if(this.getAttribute("source")){var _26=store.getTiddler(this.getAttribute("source"));_26.tags.pushUnique(_24);}}else{return false;}}if(!_23||!_23.tags){store.saveTiddler(_22,_22,"",config.options.txtUserName,new Date(),tag);}else{if(_23.tags.find(tag)==null){_23.tags.push(tag);}else{if(!_24){_23.tags.splice(_23.tags.find(tag),1);}}store.saveTiddler(_23.title,_23.title,_23.text,_23.modifier,_23.modified,_23.tags);}story.refreshTiddler(_22,null,true);if(config.options.chkAutoSave){saveChanges();}return false;};setStylesheet(".tagger a.button {font-weight: bold;display:inline; padding:0px;}\n"+".tagger #toggleButton {padding-left:2px; padding-right:2px; margin-right:1px; font-size:110%;}\n"+"#nestedtagger {background:#2E5ADF; border: 1px solid #0331BF;}\n"+".popup .listTitle {color:#000;}\n"+"","TaggerStyles");window.lewcidTiddlerSwapTag=function(_27,_28,_29){for(var i=0;i<_27.tags.length;i++){if(_27.tags[i]==_28){_27.tags[i]=_29;return true;}}return false;};window.lewcidRenameTag=function(e){var tag=this.getAttribute("tag");var _2d=prompt("Rename tag '"+tag+"' to:",tag);if((_2d==tag)||(_2d==null)){return false;}if(store.tiddlerExists(_2d)){if(confirm(config.messages.overwriteWarning.format([_2d.toString()]))){story.closeTiddler(_2d,false,false);}else{return null;}}tagged=store.getTaggedTiddlers(tag);if(tagged.length!=0){for(var j=0;j<tagged.length;j++){lewcidTiddlerSwapTag(tagged[j],tag,_2d);}}if(store.tiddlerExists(tag)){store.saveTiddler(tag,_2d);}if(document.getElementById("tiddler"+tag)){var _2f=document.getElementById(story.idPrefix+tag);var _30=story.positionTiddler(_2f);var _31=document.getElementById(story.container);story.closeTiddler(tag,false,false);story.createTiddler(_31,_30,_2d,null);story.saveTiddler(_2d);}if(config.options.chkAutoSave){saveChanges();}return false;};window.onClickTag=function(e){if(!e){var e=window.event;}var _34=resolveTarget(e);var _35=(!isNested(_34));if((Popup.stack.length>1)&&(_35==true)){Popup.removeFrom(1);}else{if(Popup.stack.length>0&&_35==false){Popup.removeFrom(0);}}var _36=(_35==false)?"popup":"nestedtagger";var _37=createTiddlyElement(document.body,"ol",_36,"popup",null);Popup.stack.push({root:this,popup:_37});var tag=this.getAttribute("tag");var _39=this.getAttribute("tiddler");if(_37&&tag){var _3a=store.getTaggedTiddlers(tag);var _3b=[];var li,r;for(r=0;r<_3a.length;r++){if(_3a[r].title!=_39){_3b.push(_3a[r].title);}}var _3d=config.views.wikified.tag;if(_3b.length>0){var _3e=createTiddlyButton(createTiddlyElement(_37,"li"),_3d.openAllText.format([tag]),_3d.openAllTooltip,onClickTagOpenAll);_3e.setAttribute("tag",tag);createTiddlyElement(createTiddlyElement(_37,"li"),"hr");for(r=0;r<_3b.length;r++){createTiddlyLink(createTiddlyElement(_37,"li"),_3b[r],true);}}else{createTiddlyText(createTiddlyElement(_37,"li",null,"disabled"),_3d.popupNone.format([tag]));}createTiddlyElement(createTiddlyElement(_37,"li"),"hr");var h=createTiddlyLink(createTiddlyElement(_37,"li"),tag,false);createTiddlyText(h,_3d.openTag.format([tag]));createTiddlyElement(createTiddlyElement(_37,"li"),"hr");var _40=createTiddlyButton(createTiddlyElement(_37,"li"),("Rename tag '"+tag+"'"),null,lewcidRenameTag);_40.setAttribute("tag",tag);}Popup.show(_37,false);e.cancelBubble=true;if(e.stopPropagation){e.stopPropagation();}return (false);};if(!window.isNested){window.isNested=function(e){while(e!=null){var _42=document.getElementById("contentWrapper");if(_42==e){return true;}e=e.parentNode;}return false;};}config.shadowTiddlers.TaggerPluginDocumentation="The documentation is available [[here.|http://tw.lewcid.org/#TaggerPluginDocumentation]]";config.shadowTiddlers.TaggerPluginSource="The uncompressed source code is available [[here.|http://tw.lewcid.org/#TaggerPluginSource]]";
// %/
/***
|''Name:''|TiddlersBarPlugin|
|''Description:''|A bar to switch between tiddlers through tabs (like browser tabs bar).|
|''Version:''|1.2.5|
|''Date:''|Jan 18,2008|
|''Source:''|http://visualtw.ouvaton.org/VisualTW.html|
|''Author:''|Pascal Collin|
|''License:''|[[BSD open source license|License]]|
|''~CoreVersion:''|2.1.0|
|''Browser:''|Firefox 2.0; InternetExplorer 6.0, others|

!Demos
On [[homepage|http://visualtw.ouvaton.org/VisualTW.html]], open several tiddlers to use the tabs bar.

!Installation
#import this tiddler from [[homepage|http://visualtw.ouvaton.org/VisualTW.html]] (tagged as systemConfig)
#save and reload
#''if you're using a custom [[PageTemplate]]'', add {{{<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>}}} before {{{<div id='tiddlerDisplay'></div>}}}
#optionally, adjust StyleSheetTiddlersBar

!Tips
*Doubleclick on the tiddlers bar (where there is no tab) create a new tiddler.
*Tabs include a button to close {{{x}}} or save {{{!}}} their tiddler.
*By default, click on the current tab close all others tiddlers.
!Configuration options 
<<option chkDisableTabsBar>> Disable the tabs bar (to print, by example).
<<option chkHideTabsBarWhenSingleTab >> Automatically hide the tabs bar when only one tiddler is displayed. 
<<option txtSelectedTiddlerTabButton>> ''selected'' tab command button.
<<option txtPreviousTabKey>> previous tab access key.
<<option txtNextTabKey>> next tab access key.

!Code
***/
//{{{
config.options.chkDisableTabsBar = config.options.chkDisableTabsBar ? config.options.chkDisableTabsBar : false;
config.options.chkHideTabsBarWhenSingleTab  = config.options.chkHideTabsBarWhenSingleTab  ? config.options.chkHideTabsBarWhenSingleTab  : false;
config.options.txtSelectedTiddlerTabButton = config.options.txtSelectedTiddlerTabButton ? config.options.txtSelectedTiddlerTabButton : "closeOthers";
config.options.txtPreviousTabKey = config.options.txtPreviousTabKey ? config.options.txtPreviousTabKey : "";
config.options.txtNextTabKey = config.options.txtNextTabKey ? config.options.txtNextTabKey : "";
config.macros.tiddlersBar = {
	tooltip : "see ",
	tooltipClose : "click here to close this tab",
	tooltipSave : "click here to save this tab",
	promptRename : "Enter tiddler new name",
	currentTiddler : "",
	previousState : false,
	previousKey : config.options.txtPreviousTabKey,
	nextKey : config.options.txtNextTabKey,	
	tabsAnimationSource : null, //use document.getElementById("tiddlerDisplay") if you need animation on tab switching.
	handler: function(place,macroName,params) {
		var previous = null;
		if (config.macros.tiddlersBar.isShown())
			story.forEachTiddler(function(title,e){
				if (title==config.macros.tiddlersBar.currentTiddler){
					var d = createTiddlyElement(null,"span",null,"tab tabSelected");
					config.macros.tiddlersBar.createActiveTabButton(d,title);
					if (previous && config.macros.tiddlersBar.previousKey) previous.setAttribute("accessKey",config.macros.tiddlersBar.nextKey);
					previous = "active";
				}
				else {
					var d = createTiddlyElement(place,"span",null,"tab tabUnselected");
					var btn = createTiddlyButton(d,title,config.macros.tiddlersBar.tooltip + title,config.macros.tiddlersBar.onSelectTab);
					btn.setAttribute("tiddler", title);
					if (previous=="active" && config.macros.tiddlersBar.nextKey) btn.setAttribute("accessKey",config.macros.tiddlersBar.previousKey);
					previous=btn;
				}
				var isDirty =story.isDirty(title);
				var c = createTiddlyButton(d,isDirty ?"!":"_",isDirty?config.macros.tiddlersBar.tooltipSave:config.macros.tiddlersBar.tooltipClose, isDirty ? config.macros.tiddlersBar.onTabSave : config.macros.tiddlersBar.onTabClose,"tabButton");
				c.setAttribute("tiddler", title);
				if (place.childNodes) {
					place.insertBefore(document.createTextNode(" "),place.firstChild); // to allow break line here when many tiddlers are open
					place.insertBefore(d,place.firstChild); 
				}
				else place.appendChild(d);
			})
	}, 
	refresh: function(place,params){
		removeChildren(place);
		config.macros.tiddlersBar.handler(place,"tiddlersBar",params);
		if (config.macros.tiddlersBar.previousState!=config.macros.tiddlersBar.isShown()) {
			story.refreshAllTiddlers();
			if (config.macros.tiddlersBar.previousState) story.forEachTiddler(function(t,e){e.style.display="";});
			config.macros.tiddlersBar.previousState = !config.macros.tiddlersBar.previousState;
		}
	},
	isShown : function(){
		if (config.options.chkDisableTabsBar) return false;
		if (!config.options.chkHideTabsBarWhenSingleTab) return true;
		var cpt=0;
		story.forEachTiddler(function(){cpt++});
		return (cpt>1);
	},
	selectNextTab : function(){  //used when the current tab is closed (to select another tab)
		var previous="";
		story.forEachTiddler(function(title){
			if (!config.macros.tiddlersBar.currentTiddler) {
				story.displayTiddler(null,title);
				return;
			}
			if (title==config.macros.tiddlersBar.currentTiddler) {
				if (previous) {
					story.displayTiddler(null,previous);
					return;
				}
				else config.macros.tiddlersBar.currentTiddler=""; 	// so next tab will be selected
			}
			else previous=title;
			});		
	},
	onSelectTab : function(e){
		var t = this.getAttribute("tiddler");
		if (t) story.displayTiddler(null,t);
		return false;
	},
	onTabClose : function(e){
		var t = this.getAttribute("tiddler");
		if (t) {
			if(story.hasChanges(t) && !readOnly) {
				if(!confirm(config.commands.cancelTiddler.warning.format([t])))
				return false;
			}
			story.closeTiddler(t);
		}
		return false;
	},
	onTabSave : function(e) {
		var t = this.getAttribute("tiddler");
		if (!e) e=window.event;
		if (t) config.commands.saveTiddler.handler(e,null,t);
		return false;
	},
	onSelectedTabButtonClick : function(event,src,title) {
		var t = this.getAttribute("tiddler");
		if (!event) event=window.event;
		if (t && config.options.txtSelectedTiddlerTabButton && config.commands[config.options.txtSelectedTiddlerTabButton])
			config.commands[config.options.txtSelectedTiddlerTabButton].handler(event, src, t);
		return false;
	},
	onTiddlersBarAction: function(event) {
		var source = event.target ? event.target.id : event.srcElement.id; // FF uses target and IE uses srcElement;
		if (source=="tiddlersBar") story.displayTiddler(null,'New Tiddler',DEFAULT_EDIT_TEMPLATE,false,null,null);
	},
	createActiveTabButton : function(place,title) {
		if (config.options.txtSelectedTiddlerTabButton && config.commands[config.options.txtSelectedTiddlerTabButton]) {
			var btn = createTiddlyButton(place, title, config.commands[config.options.txtSelectedTiddlerTabButton].tooltip ,config.macros.tiddlersBar.onSelectedTabButtonClick);
			btn.setAttribute("tiddler", title);
		}
		else
			createTiddlyText(place,title);
	}
}

story.coreCloseTiddler = story.coreCloseTiddler? story.coreCloseTiddler : story.closeTiddler;
story.coreDisplayTiddler = story.coreDisplayTiddler ? story.coreDisplayTiddler : story.displayTiddler;

story.closeTiddler = function(title,animate,unused) {
	if (title==config.macros.tiddlersBar.currentTiddler)
		config.macros.tiddlersBar.selectNextTab();
	story.coreCloseTiddler(title,false,unused); //disable animation to get it closed before calling tiddlersBar.refresh
	var e=document.getElementById("tiddlersBar");
	if (e) config.macros.tiddlersBar.refresh(e,null);
}

story.displayTiddler = function(srcElement,tiddler,template,animate,unused,customFields,toggle){
	story.coreDisplayTiddler(config.macros.tiddlersBar.tabsAnimationSource,tiddler,template,animate,unused,customFields,toggle);
	var title = (tiddler instanceof Tiddler)? tiddler.title : tiddler;  
	if (config.macros.tiddlersBar.isShown()) {
		story.forEachTiddler(function(t,e){
			if (t!=title) e.style.display="none";
			else e.style.display="";
		})
		config.macros.tiddlersBar.currentTiddler=title;
	}
	var e=document.getElementById("tiddlersBar");
	if (e) config.macros.tiddlersBar.refresh(e,null);
}

var coreRefreshPageTemplate = coreRefreshPageTemplate ? coreRefreshPageTemplate : refreshPageTemplate;
refreshPageTemplate = function(title) {
	coreRefreshPageTemplate(title);
	if (config.macros.tiddlersBar) config.macros.tiddlersBar.refresh(document.getElementById("tiddlersBar"));
}

ensureVisible=function (e) {return 0} //disable bottom scrolling (not useful now)

config.shadowTiddlers.StyleSheetTiddlersBar = "/*{{{*/\n";
config.shadowTiddlers.StyleSheetTiddlersBar += "#tiddlersBar .button {border:0}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += "#tiddlersBar .tab {white-space:nowrap}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += "#tiddlersBar {padding : 1em 0.5em 2px 0.5em}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += ".tabUnselected .tabButton, .tabSelected .tabButton {padding : 0 2px 0 2px; margin: 0 0 0 4px;}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += ".tiddler, .tabContents {border:1px [[ColorPalette::TertiaryPale]] solid;}\n";
config.shadowTiddlers.StyleSheetTiddlersBar +="/*}}}*/";
store.addNotification("StyleSheetTiddlersBar", refreshStyles);

config.refreshers.none = function(){return true;}
config.shadowTiddlers.PageTemplate=config.shadowTiddlers.PageTemplate.replace(/<div id='tiddlerDisplay'><\/div>/m,"<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>\n<div id='tiddlerDisplay'></div>");

//}}}
![[TiddlyWikiGlass]]
|TW Glass version|2.1.3|
|Tested on Windows XP|Firefox 3.5.3|
|Tested on Mac OS X  10.6.1|Firefox 3.5.3 and Safari 4.0.3|
|Integrated by|Lluís Sasplugas|
|Support & Downloads |[[www.tiddlysoft.com|http://www.tiddlysoft.com]]|
|Information & updates |[[TW Glass News|TWGlassNews]] - [[TW Glass Updates Log|TWGlassUpdates]]|
|~ViewToolbar|+editTiddler deleteTiddler > references fields closeOthers syncing permalink jump|
|~EditToolbar|+saveTiddler -cancelTiddler|
*<<search>>
* {{span{<<upload http://glass.tiddlyspot.com/store.cgi index.html . .  glass>><<setIcon save.png "" notext>>}}}
*{{span{<<newTiddler text:''>><<setIcon new.png "" notext>>}}}
*{{span{<<newJournal>><<setIcon journal.png "" notext>>}}}
*{{span{<<closeAll>><<setIcon closeall.png "" notext>>}}}
*[img[separa.png]]
*[img[house.png][GettingStarted]]
*[img[Options|options.png][SideBarOptions]]
*[img[Tabs|tabs.png][SideBarTabs]]
*[img[Timeline|clock.png][TabTimeline]]
*[img[All|all.png][TabAll]]
*[img[Tags|tag.png][TabTags]]
*[img[More|more.png][TabMore]]
*[img[separa.png]]
*[img[Update|update.png][Update]]
/***
Description: Contains the stuff you need to use Tiddlyspot
Note, you also need UploadPlugin, PasswordOptionPlugin and LoadRemoteFileThroughProxy
from http://tiddlywiki.bidix.info for a complete working Tiddlyspot site.
***/
//{{{

// edit this if you are migrating sites or retrofitting an existing TW
config.tiddlyspotSiteId = 'glass';

// make it so you can by default see edit controls via http
config.options.chkHttpReadOnly = false;
window.readOnly = false; // make sure of it (for tw 2.2)
window.showBackstage = true; // show backstage too

// disable autosave in d3
if (window.location.protocol != "file:")
	config.options.chkGTDLazyAutoSave = false;

// tweak shadow tiddlers to add upload button, password entry box etc
with (config.shadowTiddlers) {
	SiteUrl = 'http://'+config.tiddlyspotSiteId+'.tiddlyspot.com';
	SideBarOptions = SideBarOptions.replace(/(<<saveChanges>>)/,"$1<<tiddler TspotSidebar>>");
	OptionsPanel = OptionsPanel.replace(/^/,"<<tiddler TspotOptions>>");
	DefaultTiddlers = DefaultTiddlers.replace(/^/,"[[WelcomeToTiddlyspot]] ");
	MainMenu = MainMenu.replace(/^/,"[[WelcomeToTiddlyspot]] ");
}

// create some shadow tiddler content
merge(config.shadowTiddlers,{

'WelcomeToTiddlyspot':[
 "This document is a ~TiddlyWiki from tiddlyspot.com.  A ~TiddlyWiki is an electronic notebook that is great for managing todo lists, personal information, and all sorts of things.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //What now?// &nbsp;&nbsp;@@ Before you can save any changes, you need to enter your password in the form below.  Then configure privacy and other site settings at your [[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]] (your control panel username is //" + config.tiddlyspotSiteId + "//).",
 "<<tiddler TspotControls>>",
 "See also GettingStarted.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Working online// &nbsp;&nbsp;@@ You can edit this ~TiddlyWiki right now, and save your changes using the \"save to web\" button in the column on the right.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Working offline// &nbsp;&nbsp;@@ A fully functioning copy of this ~TiddlyWiki can be saved onto your hard drive or USB stick.  You can make changes and save them locally without being connected to the Internet.  When you're ready to sync up again, just click \"upload\" and your ~TiddlyWiki will be saved back to tiddlyspot.com.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Help!// &nbsp;&nbsp;@@ Find out more about ~TiddlyWiki at [[TiddlyWiki.com|http://tiddlywiki.com]].  Also visit [[TiddlyWiki.org|http://tiddlywiki.org]] for documentation on learning and using ~TiddlyWiki. New users are especially welcome on the [[TiddlyWiki mailing list|http://groups.google.com/group/TiddlyWiki]], which is an excellent place to ask questions and get help.  If you have a tiddlyspot related problem email [[tiddlyspot support|mailto:support@tiddlyspot.com]].",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Enjoy :)// &nbsp;&nbsp;@@ We hope you like using your tiddlyspot.com site.  Please email [[feedback@tiddlyspot.com|mailto:feedback@tiddlyspot.com]] with any comments or suggestions."
].join("\n"),

'TspotControls':[
 "| tiddlyspot password:|<<option pasUploadPassword>>|",
 "| site management:|<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . .  " + config.tiddlyspotSiteId + ">>//(requires tiddlyspot password)//<br>[[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]], [[download (go offline)|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download]]|",
 "| links:|[[tiddlyspot.com|http://tiddlyspot.com/]], [[FAQs|http://faq.tiddlyspot.com/]], [[blog|http://tiddlyspot.blogspot.com/]], email [[support|mailto:support@tiddlyspot.com]] & [[feedback|mailto:feedback@tiddlyspot.com]], [[donate|http://tiddlyspot.com/?page=donate]]|"
].join("\n"),

'TspotSidebar':[
 "<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . .  " + config.tiddlyspotSiteId + ">><html><a href='http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download' class='button'>download</a></html>"
].join("\n"),

'TspotOptions':[
 "tiddlyspot password:",
 "<<option pasUploadPassword>>",
 ""
].join("\n")

});
//}}}
<<upload http://glass.tiddlyspot.com/store.cgi index.html . .  glass>>
<html><a href='http://glass.tiddlyspot.com/download' class='button'>download</a></html>
!@@This feature is no available in demo mode@@
but you can see the video

<html><span style="display:block;text-align:center;"><object width="640" height="400"><param name="movie" value="http://www.youtube.com/v/HLNVlcxKb-w&hl=es&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/HLNVlcxKb-w&hl=es&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="400"></embed></object></span></html>
| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |
| 21/10/2009 10:00:32 | sas | [[/|http://glass.tiddlyspot.com/]] | [[store.cgi|http://glass.tiddlyspot.com/store.cgi]] | . | [[index.html | http://glass.tiddlyspot.com/index.html]] | . |
| 21/10/2009 10:01:30 | sas | [[/|http://glass.tiddlyspot.com/]] | [[store.cgi|http://glass.tiddlyspot.com/store.cgi]] | . | [[index.html | http://glass.tiddlyspot.com/index.html]] | . | ok | ok |
| 21/10/2009 10:02:42 | sas | [[/|http://glass.tiddlyspot.com/]] | [[store.cgi|http://glass.tiddlyspot.com/store.cgi]] | . | [[index.html | http://glass.tiddlyspot.com/index.html]] | . |
| 21/10/2009 12:41:34 | sas | [[/|http://glass.tiddlyspot.com/]] | [[store.cgi|http://glass.tiddlyspot.com/store.cgi]] | . | [[index.html | http://glass.tiddlyspot.com/index.html]] | . |
| 25/10/2009 13:45:59 | YourName | [[/|http://glass.tiddlyspot.com/]] | [[store.cgi|http://glass.tiddlyspot.com/store.cgi]] | . | [[index.html | http://glass.tiddlyspot.com/index.html]] | . | ok |
| 25/10/2009 13:50:15 | YourName | [[/|http://glass.tiddlyspot.com/]] | [[store.cgi|http://glass.tiddlyspot.com/store.cgi]] | . | [[index.html | http://glass.tiddlyspot.com/index.html]] | . |
| 25/10/2009 23:46:27 | YourName | [[/|http://glass.tiddlyspot.com/]] | [[store.cgi|http://glass.tiddlyspot.com/store.cgi]] | . | [[index.html | http://glass.tiddlyspot.com/index.html]] | . | ok |
| 25/10/2009 23:46:57 | YourName | [[/|http://glass.tiddlyspot.com/]] | [[store.cgi|http://glass.tiddlyspot.com/store.cgi]] | . | [[index.html | http://glass.tiddlyspot.com/index.html]] | . |
| 26/10/2009 10:24:35 | sas | [[/|http://glass.tiddlyspot.com/]] | [[store.cgi|http://glass.tiddlyspot.com/store.cgi]] | . | [[index.html | http://glass.tiddlyspot.com/index.html]] | . |
| 03/07/2018 15:17:44 | YourName | [[/|http://glass.tiddlyspot.com/]] | [[store.cgi|http://glass.tiddlyspot.com/store.cgi]] | . | [[index.html | http://glass.tiddlyspot.com/index.html]] | . |
/***
|''Name:''|UploadPlugin|
|''Description:''|Save to web a TiddlyWiki|
|''Version:''|4.1.3|
|''Date:''|Feb 24, 2008|
|''Source:''|http://tiddlywiki.bidix.info/#UploadPlugin|
|''Documentation:''|http://tiddlywiki.bidix.info/#UploadPluginDoc|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0|
|''Requires:''|PasswordOptionPlugin|
***/
//{{{
version.extensions.UploadPlugin = {
	major: 4, minor: 1, revision: 3,
	date: new Date("Feb 24, 2008"),
	source: 'http://tiddlywiki.bidix.info/#UploadPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	coreVersion: '2.2.0'
};

//
// Environment
//

if (!window.bidix) window.bidix = {}; // bidix namespace
bidix.debugMode = false;	// true to activate both in Plugin and UploadService
	
//
// Upload Macro
//

config.macros.upload = {
// default values
	defaultBackupDir: '',	//no backup
	defaultStoreScript: "store.php",
	defaultToFilename: "index.html",
	defaultUploadDir: ".",
	authenticateUser: true	// UploadService Authenticate User
};
	
config.macros.upload.label = {
	promptOption: "Save and Upload this TiddlyWiki with UploadOptions",
	promptParamMacro: "Save and Upload this TiddlyWiki in %0",
	saveLabel: "save to web", 
	saveToDisk: "save to disk",
	uploadLabel: "upload"	
};

config.macros.upload.messages = {
	noStoreUrl: "No store URL in parmeters or options",
	usernameOrPasswordMissing: "Username or password missing"
};

config.macros.upload.handler = function(place,macroName,params) {
	if (readOnly)
		return;
	var label;
	if (document.location.toString().substr(0,4) == "http") 
		label = this.label.saveLabel;
	else
		label = this.label.uploadLabel;
	var prompt;
	if (params[0]) {
		prompt = this.label.promptParamMacro.toString().format([this.destFile(params[0], 
			(params[1] ? params[1]:bidix.basename(window.location.toString())), params[3])]);
	} else {
		prompt = this.label.promptOption;
	}
	createTiddlyButton(place, label, prompt, function() {config.macros.upload.action(params);}, null, null, this.accessKey);
};

config.macros.upload.action = function(params)
{
		// for missing macro parameter set value from options
		if (!params) params = {};
		var storeUrl = params[0] ? params[0] : config.options.txtUploadStoreUrl;
		var toFilename = params[1] ? params[1] : config.options.txtUploadFilename;
		var backupDir = params[2] ? params[2] : config.options.txtUploadBackupDir;
		var uploadDir = params[3] ? params[3] : config.options.txtUploadDir;
		var username = params[4] ? params[4] : config.options.txtUploadUserName;
		var password = config.options.pasUploadPassword; // for security reason no password as macro parameter	
		// for still missing parameter set default value
		if ((!storeUrl) && (document.location.toString().substr(0,4) == "http")) 
			storeUrl = bidix.dirname(document.location.toString())+'/'+config.macros.upload.defaultStoreScript;
		if (storeUrl.substr(0,4) != "http")
			storeUrl = bidix.dirname(document.location.toString()) +'/'+ storeUrl;
		if (!toFilename)
			toFilename = bidix.basename(window.location.toString());
		if (!toFilename)
			toFilename = config.macros.upload.defaultToFilename;
		if (!uploadDir)
			uploadDir = config.macros.upload.defaultUploadDir;
		if (!backupDir)
			backupDir = config.macros.upload.defaultBackupDir;
		// report error if still missing
		if (!storeUrl) {
			alert(config.macros.upload.messages.noStoreUrl);
			clearMessage();
			return false;
		}
		if (config.macros.upload.authenticateUser && (!username || !password)) {
			alert(config.macros.upload.messages.usernameOrPasswordMissing);
			clearMessage();
			return false;
		}
		bidix.upload.uploadChanges(false,null,storeUrl, toFilename, uploadDir, backupDir, username, password); 
		return false; 
};

config.macros.upload.destFile = function(storeUrl, toFilename, uploadDir) 
{
	if (!storeUrl)
		return null;
		var dest = bidix.dirname(storeUrl);
		if (uploadDir && uploadDir != '.')
			dest = dest + '/' + uploadDir;
		dest = dest + '/' + toFilename;
	return dest;
};

//
// uploadOptions Macro
//

config.macros.uploadOptions = {
	handler: function(place,macroName,params) {
		var wizard = new Wizard();
		wizard.createWizard(place,this.wizardTitle);
		wizard.addStep(this.step1Title,this.step1Html);
		var markList = wizard.getElement("markList");
		var listWrapper = document.createElement("div");
		markList.parentNode.insertBefore(listWrapper,markList);
		wizard.setValue("listWrapper",listWrapper);
		this.refreshOptions(listWrapper,false);
		var uploadCaption;
		if (document.location.toString().substr(0,4) == "http") 
			uploadCaption = config.macros.upload.label.saveLabel;
		else
			uploadCaption = config.macros.upload.label.uploadLabel;
		
		wizard.setButtons([
				{caption: uploadCaption, tooltip: config.macros.upload.label.promptOption, 
					onClick: config.macros.upload.action},
				{caption: this.cancelButton, tooltip: this.cancelButtonPrompt, onClick: this.onCancel}
				
			]);
	},
	options: [
		"txtUploadUserName",
		"pasUploadPassword",
		"txtUploadStoreUrl",
		"txtUploadDir",
		"txtUploadFilename",
		"txtUploadBackupDir",
		"chkUploadLog",
		"txtUploadLogMaxLine"		
	],
	refreshOptions: function(listWrapper) {
		var opts = [];
		for(i=0; i<this.options.length; i++) {
			var opt = {};
			opts.push();
			opt.option = "";
			n = this.options[i];
			opt.name = n;
			opt.lowlight = !config.optionsDesc[n];
			opt.description = opt.lowlight ? this.unknownDescription : config.optionsDesc[n];
			opts.push(opt);
		}
		var listview = ListView.create(listWrapper,opts,this.listViewTemplate);
		for(n=0; n<opts.length; n++) {
			var type = opts[n].name.substr(0,3);
			var h = config.macros.option.types[type];
			if (h && h.create) {
				h.create(opts[n].colElements['option'],type,opts[n].name,opts[n].name,"no");
			}
		}
		
	},
	onCancel: function(e)
	{
		backstage.switchTab(null);
		return false;
	},
	
	wizardTitle: "Upload with options",
	step1Title: "These options are saved in cookies in your browser",
	step1Html: "<input type='hidden' name='markList'></input><br>",
	cancelButton: "Cancel",
	cancelButtonPrompt: "Cancel prompt",
	listViewTemplate: {
		columns: [
			{name: 'Description', field: 'description', title: "Description", type: 'WikiText'},
			{name: 'Option', field: 'option', title: "Option", type: 'String'},
			{name: 'Name', field: 'name', title: "Name", type: 'String'}
			],
		rowClasses: [
			{className: 'lowlight', field: 'lowlight'} 
			]}
};

//
// upload functions
//

if (!bidix.upload) bidix.upload = {};

if (!bidix.upload.messages) bidix.upload.messages = {
	//from saving
	invalidFileError: "The original file '%0' does not appear to be a valid TiddlyWiki",
	backupSaved: "Backup saved",
	backupFailed: "Failed to upload backup file",
	rssSaved: "RSS feed uploaded",
	rssFailed: "Failed to upload RSS feed file",
	emptySaved: "Empty template uploaded",
	emptyFailed: "Failed to upload empty template file",
	mainSaved: "Main TiddlyWiki file uploaded",
	mainFailed: "Failed to upload main TiddlyWiki file. Your changes have not been saved",
	//specific upload
	loadOriginalHttpPostError: "Can't get original file",
	aboutToSaveOnHttpPost: 'About to upload on %0 ...',
	storePhpNotFound: "The store script '%0' was not found."
};

bidix.upload.uploadChanges = function(onlyIfDirty,tiddlers,storeUrl,toFilename,uploadDir,backupDir,username,password)
{
	var callback = function(status,uploadParams,original,url,xhr) {
		if (!status) {
			displayMessage(bidix.upload.messages.loadOriginalHttpPostError);
			return;
		}
		if (bidix.debugMode) 
			alert(original.substr(0,500)+"\n...");
		// Locate the storeArea div's 
		var posDiv = locateStoreArea(original);
		if((posDiv[0] == -1) || (posDiv[1] == -1)) {
			alert(config.messages.invalidFileError.format([localPath]));
			return;
		}
		bidix.upload.uploadRss(uploadParams,original,posDiv);
	};
	
	if(onlyIfDirty && !store.isDirty())
		return;
	clearMessage();
	// save on localdisk ?
	if (document.location.toString().substr(0,4) == "file") {
		var path = document.location.toString();
		var localPath = getLocalPath(path);
		saveChanges();
	}
	// get original
	var uploadParams = new Array(storeUrl,toFilename,uploadDir,backupDir,username,password);
	var originalPath = document.location.toString();
	// If url is a directory : add index.html
	if (originalPath.charAt(originalPath.length-1) == "/")
		originalPath = originalPath + "index.html";
	var dest = config.macros.upload.destFile(storeUrl,toFilename,uploadDir);
	var log = new bidix.UploadLog();
	log.startUpload(storeUrl, dest, uploadDir,  backupDir);
	displayMessage(bidix.upload.messages.aboutToSaveOnHttpPost.format([dest]));
	if (bidix.debugMode) 
		alert("about to execute Http - GET on "+originalPath);
	var r = doHttp("GET",originalPath,null,null,username,password,callback,uploadParams,null);
	if (typeof r == "string")
		displayMessage(r);
	return r;
};

bidix.upload.uploadRss = function(uploadParams,original,posDiv) 
{
	var callback = function(status,params,responseText,url,xhr) {
		if(status) {
			var destfile = responseText.substring(responseText.indexOf("destfile:")+9,responseText.indexOf("\n", responseText.indexOf("destfile:")));
			displayMessage(bidix.upload.messages.rssSaved,bidix.dirname(url)+'/'+destfile);
			bidix.upload.uploadMain(params[0],params[1],params[2]);
		} else {
			displayMessage(bidix.upload.messages.rssFailed);			
		}
	};
	// do uploadRss
	if(config.options.chkGenerateAnRssFeed) {
		var rssPath = uploadParams[1].substr(0,uploadParams[1].lastIndexOf(".")) + ".xml";
		var rssUploadParams = new Array(uploadParams[0],rssPath,uploadParams[2],'',uploadParams[4],uploadParams[5]);
		var rssString = generateRss();
		// no UnicodeToUTF8 conversion needed when location is "file" !!!
		if (document.location.toString().substr(0,4) != "file")
			rssString = convertUnicodeToUTF8(rssString);	
		bidix.upload.httpUpload(rssUploadParams,rssString,callback,Array(uploadParams,original,posDiv));
	} else {
		bidix.upload.uploadMain(uploadParams,original,posDiv);
	}
};

bidix.upload.uploadMain = function(uploadParams,original,posDiv) 
{
	var callback = function(status,params,responseText,url,xhr) {
		var log = new bidix.UploadLog();
		if(status) {
			// if backupDir specified
			if ((params[3]) && (responseText.indexOf("backupfile:") > -1))  {
				var backupfile = responseText.substring(responseText.indexOf("backupfile:")+11,responseText.indexOf("\n", responseText.indexOf("backupfile:")));
				displayMessage(bidix.upload.messages.backupSaved,bidix.dirname(url)+'/'+backupfile);
			}
			var destfile = responseText.substring(responseText.indexOf("destfile:")+9,responseText.indexOf("\n", responseText.indexOf("destfile:")));
			displayMessage(bidix.upload.messages.mainSaved,bidix.dirname(url)+'/'+destfile);
			store.setDirty(false);
			log.endUpload("ok");
		} else {
			alert(bidix.upload.messages.mainFailed);
			displayMessage(bidix.upload.messages.mainFailed);
			log.endUpload("failed");			
		}
	};
	// do uploadMain
	var revised = bidix.upload.updateOriginal(original,posDiv);
	bidix.upload.httpUpload(uploadParams,revised,callback,uploadParams);
};

bidix.upload.httpUpload = function(uploadParams,data,callback,params)
{
	var localCallback = function(status,params,responseText,url,xhr) {
		url = (url.indexOf("nocache=") < 0 ? url : url.substring(0,url.indexOf("nocache=")-1));
		if (xhr.status == 404)
			alert(bidix.upload.messages.storePhpNotFound.format([url]));
		if ((bidix.debugMode) || (responseText.indexOf("Debug mode") >= 0 )) {
			alert(responseText);
			if (responseText.indexOf("Debug mode") >= 0 )
				responseText = responseText.substring(responseText.indexOf("\n\n")+2);
		} else if (responseText.charAt(0) != '0') 
			alert(responseText);
		if (responseText.charAt(0) != '0')
			status = null;
		callback(status,params,responseText,url,xhr);
	};
	// do httpUpload
	var boundary = "---------------------------"+"AaB03x";	
	var uploadFormName = "UploadPlugin";
	// compose headers data
	var sheader = "";
	sheader += "--" + boundary + "\r\nContent-disposition: form-data; name=\"";
	sheader += uploadFormName +"\"\r\n\r\n";
	sheader += "backupDir="+uploadParams[3] +
				";user=" + uploadParams[4] +
				";password=" + uploadParams[5] +
				";uploaddir=" + uploadParams[2];
	if (bidix.debugMode)
		sheader += ";debug=1";
	sheader += ";;\r\n"; 
	sheader += "\r\n" + "--" + boundary + "\r\n";
	sheader += "Content-disposition: form-data; name=\"userfile\"; filename=\""+uploadParams[1]+"\"\r\n";
	sheader += "Content-Type: text/html;charset=UTF-8" + "\r\n";
	sheader += "Content-Length: " + data.length + "\r\n\r\n";
	// compose trailer data
	var strailer = new String();
	strailer = "\r\n--" + boundary + "--\r\n";
	data = sheader + data + strailer;
	if (bidix.debugMode) alert("about to execute Http - POST on "+uploadParams[0]+"\n with \n"+data.substr(0,500)+ " ... ");
	var r = doHttp("POST",uploadParams[0],data,"multipart/form-data; ;charset=UTF-8; boundary="+boundary,uploadParams[4],uploadParams[5],localCallback,params,null);
	if (typeof r == "string")
		displayMessage(r);
	return r;
};

// same as Saving's updateOriginal but without convertUnicodeToUTF8 calls
bidix.upload.updateOriginal = function(original, posDiv)
{
	if (!posDiv)
		posDiv = locateStoreArea(original);
	if((posDiv[0] == -1) || (posDiv[1] == -1)) {
		alert(config.messages.invalidFileError.format([localPath]));
		return;
	}
	var revised = original.substr(0,posDiv[0] + startSaveArea.length) + "\n" +
				store.allTiddlersAsHtml() + "\n" +
				original.substr(posDiv[1]);
	var newSiteTitle = getPageTitle().htmlEncode();
	revised = revised.replaceChunk("<title"+">","</title"+">"," " + newSiteTitle + " ");
	revised = updateMarkupBlock(revised,"PRE-HEAD","MarkupPreHead");
	revised = updateMarkupBlock(revised,"POST-HEAD","MarkupPostHead");
	revised = updateMarkupBlock(revised,"PRE-BODY","MarkupPreBody");
	revised = updateMarkupBlock(revised,"POST-SCRIPT","MarkupPostBody");
	return revised;
};

//
// UploadLog
// 
// config.options.chkUploadLog :
//		false : no logging
//		true : logging
// config.options.txtUploadLogMaxLine :
//		-1 : no limit
//      0 :  no Log lines but UploadLog is still in place
//		n :  the last n lines are only kept
//		NaN : no limit (-1)

bidix.UploadLog = function() {
	if (!config.options.chkUploadLog) 
		return; // this.tiddler = null
	this.tiddler = store.getTiddler("UploadLog");
	if (!this.tiddler) {
		this.tiddler = new Tiddler();
		this.tiddler.title = "UploadLog";
		this.tiddler.text = "| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |";
		this.tiddler.created = new Date();
		this.tiddler.modifier = config.options.txtUserName;
		this.tiddler.modified = new Date();
		store.addTiddler(this.tiddler);
	}
	return this;
};

bidix.UploadLog.prototype.addText = function(text) {
	if (!this.tiddler)
		return;
	// retrieve maxLine when we need it
	var maxLine = parseInt(config.options.txtUploadLogMaxLine,10);
	if (isNaN(maxLine))
		maxLine = -1;
	// add text
	if (maxLine != 0) 
		this.tiddler.text = this.tiddler.text + text;
	// Trunck to maxLine
	if (maxLine >= 0) {
		var textArray = this.tiddler.text.split('\n');
		if (textArray.length > maxLine + 1)
			textArray.splice(1,textArray.length-1-maxLine);
			this.tiddler.text = textArray.join('\n');		
	}
	// update tiddler fields
	this.tiddler.modifier = config.options.txtUserName;
	this.tiddler.modified = new Date();
	store.addTiddler(this.tiddler);
	// refresh and notifiy for immediate update
	story.refreshTiddler(this.tiddler.title);
	store.notify(this.tiddler.title, true);
};

bidix.UploadLog.prototype.startUpload = function(storeUrl, toFilename, uploadDir,  backupDir) {
	if (!this.tiddler)
		return;
	var now = new Date();
	var text = "\n| ";
	var filename = bidix.basename(document.location.toString());
	if (!filename) filename = '/';
	text += now.formatString("0DD/0MM/YYYY 0hh:0mm:0ss") +" | ";
	text += config.options.txtUserName + " | ";
	text += "[["+filename+"|"+location + "]] |";
	text += " [[" + bidix.basename(storeUrl) + "|" + storeUrl + "]] | ";
	text += uploadDir + " | ";
	text += "[[" + bidix.basename(toFilename) + " | " +toFilename + "]] | ";
	text += backupDir + " |";
	this.addText(text);
};

bidix.UploadLog.prototype.endUpload = function(status) {
	if (!this.tiddler)
		return;
	this.addText(" "+status+" |");
};

//
// Utilities
// 

bidix.checkPlugin = function(plugin, major, minor, revision) {
	var ext = version.extensions[plugin];
	if (!
		(ext  && 
			((ext.major > major) || 
			((ext.major == major) && (ext.minor > minor))  ||
			((ext.major == major) && (ext.minor == minor) && (ext.revision >= revision))))) {
			// write error in PluginManager
			if (pluginInfo)
				pluginInfo.log.push("Requires " + plugin + " " + major + "." + minor + "." + revision);
			eval(plugin); // generate an error : "Error: ReferenceError: xxxx is not defined"
	}
};

bidix.dirname = function(filePath) {
	if (!filePath) 
		return;
	var lastpos;
	if ((lastpos = filePath.lastIndexOf("/")) != -1) {
		return filePath.substring(0, lastpos);
	} else {
		return filePath.substring(0, filePath.lastIndexOf("\\"));
	}
};

bidix.basename = function(filePath) {
	if (!filePath) 
		return;
	var lastpos;
	if ((lastpos = filePath.lastIndexOf("#")) != -1) 
		filePath = filePath.substring(0, lastpos);
	if ((lastpos = filePath.lastIndexOf("/")) != -1) {
		return filePath.substring(lastpos + 1);
	} else
		return filePath.substring(filePath.lastIndexOf("\\")+1);
};

bidix.initOption = function(name,value) {
	if (!config.options[name])
		config.options[name] = value;
};

//
// Initializations
//

// require PasswordOptionPlugin 1.0.1 or better
bidix.checkPlugin("PasswordOptionPlugin", 1, 0, 1);

// styleSheet
setStylesheet('.txtUploadStoreUrl, .txtUploadBackupDir, .txtUploadDir {width: 22em;}',"uploadPluginStyles");

//optionsDesc
merge(config.optionsDesc,{
	txtUploadStoreUrl: "Url of the UploadService script (default: store.php)",
	txtUploadFilename: "Filename of the uploaded file (default: in index.html)",
	txtUploadDir: "Relative Directory where to store the file (default: . (downloadService directory))",
	txtUploadBackupDir: "Relative Directory where to backup the file. If empty no backup. (default: ''(empty))",
	txtUploadUserName: "Upload Username",
	pasUploadPassword: "Upload Password",
	chkUploadLog: "do Logging in UploadLog (default: true)",
	txtUploadLogMaxLine: "Maximum of lines in UploadLog (default: 10)"
});

// Options Initializations
bidix.initOption('txtUploadStoreUrl','');
bidix.initOption('txtUploadFilename','');
bidix.initOption('txtUploadDir','');
bidix.initOption('txtUploadBackupDir','');
bidix.initOption('txtUploadUserName','');
bidix.initOption('pasUploadPassword','');
bidix.initOption('chkUploadLog',true);
bidix.initOption('txtUploadLogMaxLine','10');


// Backstage
merge(config.tasks,{
	uploadOptions: {text: "upload", tooltip: "Change UploadOptions and Upload", content: '<<uploadOptions>>'}
});
config.backstageTasks.push("uploadOptions");


//}}}

<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'>
<span class='toolbaraction' macro='toolbar closeTiddler'><span macro='setIcon trans.gif "" notext'></span></span>
<span style="padding-right:2em;" macro='tagger'></span></div>
<div class='title' macro='view title'><span class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> <br>
(<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)
</span></div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'>
<div class='referenced' macro='referenced'></div></div>
<div class='viewer' macro='view text wikified'><span class='sectionTOC'></span></div>
<div class='tagClear'></div>
<!--}}}-->
This document is a ~TiddlyWiki from tiddlyspot.com.  A ~TiddlyWiki is an electronic notebook that is great for managing todo lists, personal information, and all sorts of things.

//What now?// Before you can save any changes, you need to enter your password in the form below.  Then configure privacy and other site settings at your [[control panel|http://glass.tiddlyspot.com/controlpanel]] (your control panel username is //glass//).
<<tiddler TspotControls>>
See also GettingStarted.

''Working online'' You can edit this ~TiddlyWiki right now, and save your changes using the "save to web" button in the column on the right.

''Working offline'' A fully functioning copy of this ~TiddlyWiki can be saved onto your hard drive or USB stick.  You can make changes and save them locally without being connected to the Internet.  When you're ready to sync up again, just click "upload" and your ~TiddlyWiki will be saved back to tiddlyspot.com.

''Help!'' Find out more about ~TiddlyWiki at [[TiddlyWiki.com|http://tiddlywiki.com]].  Also visit [[TiddlyWiki.org|http://tiddlywiki.org]] for documentation on learning and using ~TiddlyWiki. New users are especially welcome on the [[TiddlyWiki mailing list|http://groups.google.com/group/TiddlyWiki]], which is an excellent place to ask questions and get help.  If you have a tiddlyspot related problem email [[tiddlyspot support|mailto:support@tiddlyspot.com]].

''Enjoy :)'' We hope you like using your tiddlyspot.com site.  Please email [[feedback@tiddlyspot.com|mailto:feedback@tiddlyspot.com]] with any comments or suggestions.
/***
|''Name:''|YourSearchPlugin|
|''Version:''|2.1.4 (2009-09-04) //Unofficial version//|
|''Source:''|http://tiddlywiki.abego-software.de/#YourSearchPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]|
|''Copyright:''|&copy; 2005-2008 [[abego Software|http://www.abego-software.de]]|
|''~CoreVersion:''|2.1.0|
|''Community:''|[[del.icio.us|http://del.icio.us/post?url=http://tiddlywiki.abego-software.de/index.html%23YourSearchPlugin]]|
|''Browser:''|Firefox 1.0.4+; Firefox 1.5; ~InternetExplorer 6.0|
!About YourSearch
YourSearch gives you a bunch of new features to simplify and speed up your daily searches in TiddlyWiki. It seamlessly integrates into the standard TiddlyWiki search: just start typing into the 'search' field and explore!

For more information see [[Help|YourSearch Help]].

!Compatibility
This plugin requires TiddlyWiki 2.1. 
Check the [[archive|http://tiddlywiki.abego-software.de/archive]] for ~YourSearchPlugins supporting older versions of TiddlyWiki.

!Revision history
* v2.1.4 (2008-10-28)
** Fixed problem when searching texts containing "not","and","or" without quoting the searched text. Thanks to el noi and Walter Schell for reporting.
** Support diacritic characters in searched text, i.e. searching for "cafe" will also find "café" etc.
* v2.1.3 (2008-04-16)
** Fixed problem with Firefox3. Thanks to Andreas Hoefler for reporting.
* v2.1.2 (2008-03-17)
** Bug: on IE (6.0) the first letter is dropped from the search string. Thanks to Kashgarinn and Nick Padfield for reporting.
* v2.1.1 (2007-03-11)
** Extend "New tiddler" feature: Ctrl-Return invokes the "new tiddler" feature (create tiddler based on search text)
** Extend "New tiddler" feature: tiddler's text and tags may also be specified (see abego.parseNewTiddlerCommandLine)
** Support searching for URLs (like http://www.example.com)
** Provided extended public API (abego.YourSearch.getFoundTiddlers/getQuery/onShowResult)
** Clear MessageBox when search field gets focus (so the box no longer hides the search field)
** Reset search result when TiddlyWiki is changed
** Fix function abego.BoolExp
* v2.1.0 (2006-10-12)
** Release version with TiddlyWiki 2.1 support
*** Support (Extended) Field search
*** Support parenthesis in Boolean Search
*** Support direct regular expression input
*** Support JavaScript Expressions for filtering
*** "new tiddler" feature (create tiddler based on search text)
* v2.0.2 (2006-02-13)
** Bugfix for Firefox 1.5.0.1 related to the "Show prefix" checkbox. Thanks to Ted Pavlic for reporting and to BramChen for fixing. 
** Internal
*** Make "JSLint" conform
* v2.0.1 (2006-02-05)
** Support "Exact Word Match" (use '=' to prefix word)
** Support default filter settings (when no filter flags are given in search term)
** Rework on the "less than 3 chars search text" feature (thanks to EricShulman)
** Better support SinglePageMode when doing "Open all tiddlers" (thanks to EricShulman)
** Support Firefox 1.5.0.1
** Bug: Fixed a hilite bug in "classic search mode" (thanks to EricShulman)
* v2.0.0 (2006-01-16)
** Add User Interface
* v1.0.1 (2006-01-06)
** Support TiddlyWiki 2.0
* v1.0.0 (2005-12-28)
** initial version
!Source Code
***/
//{{{
//============================================================================
//============================================================================
//                           YourSearchPlugin
//============================================================================
//============================================================================

// Ensure that the Plugin is only installed once.
//
if (!version.extensions.YourSearchPlugin) {

version.extensions.YourSearchPlugin = {
	major: 2, minor: 1, revision: 4,
	source: "http://tiddlywiki.abego-software.de/#YourSearchPlugin",
	licence: "[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]",
	copyright: "Copyright (c) abego Software GmbH, 2005-2008 (www.abego-software.de)"
};

if (!window.abego) window.abego = {};

// define the Array forEach when not yet defined (e.g. by Mozilla)
if (!Array.forEach) {
    Array.forEach = function(obj, callback, thisObj) {
        for (var i = 0,len = obj.length; i < len; i++)
            callback.call(thisObj, obj[i], i, obj);
    };
    Array.prototype.forEach = function(callback, thisObj) {
        for (var i = 0,len = this.length; i < len; i++)
            callback.call(thisObj,  this[i], i, this);
    };
}

abego.toInt = function(s, defaultValue) {
	if (!s) return defaultValue;
	var n = parseInt(s);
	return (n == NaN) ? defaultValue : n;
};

abego.createEllipsis = function(place) {
	var e = createTiddlyElement(place,"span");
	e.innerHTML = "&hellip;";
};

//#concept Object
//
abego.shallowCopy = function(object) {
	if (!object)
		return object;
	var result = {};
	for (var n in object) 
		result[n] = object[n];
	return result;
};

// Returns a shallow copy of the options, or a new, empty object if options is null/undefined.
//
// @param options [may be null/undefined]
//
//#concept Object, Options
//#import abego.shallowCopy
//
abego.copyOptions = function(options) {
	return !options ? {} : abego.shallowCopy(options);
};

//#import abego.define-namespace
// returns the number of occurances of s in the text
abego.countStrings = function(text, s) {
	if (!s)
		return 0;
		
	var len = s.length;
	var n = 0;
	var lastIndex = 0;
	while (1) {
		var i = text.indexOf(s, lastIndex);
		if (i < 0)
			return n;
		n++;
		lastIndex = i+len;
	}
	return n;
};// Returns the content of the first "braced" text {...}
// Also takes care of nested braces
//
// Returns undefined when no braced text is found or it is not properly nested
//
// @param [optional] when defined and a braced text is found lastIndexRef.lastIndex will contain the index of the char following the (final) closing brace on return.
//
abego.getBracedText = function(text, offset,lastIndexRef) {
	if (!offset) offset = 0;
	var re = /\{([^\}]*)\}/gm;
	re.lastIndex = offset;
	var m = re.exec(text);
	if (m) {
		// The matching stopped at the first closing brace.
		// But if the matched text contains opening braces 
		// this is not the final closing brace.
		// Handle this case specially, find the "corresponding" closing brace
		var s = m[1];
		var nExtraOpenBrace = abego.countStrings(s,"{");
		
		if (!nExtraOpenBrace) {
			if (lastIndexRef)
				lastIndexRef.lastIndex = re.lastIndex;
			// simple case: no nested braces
			return s;
		}

		// special case: "nested braces"
		var len = text.length;
		for (var i = re.lastIndex; i < len && nExtraOpenBrace; i++) {
			var c = text.charAt(i);
			if (c == "{") 
				nExtraOpenBrace++;
			else if (c == "}")
				nExtraOpenBrace--;
		}
		if (!nExtraOpenBrace) {
			// found the corresponding "}".
			if (lastIndexRef)
				lastIndexRef.lastIndex = i-1;
			return text.substring(m.index+1, i-1);
		}
	}
	
	// no return means: return undefined;
};

// Returns an array with those items from the array that pass the given test
//
// @param test an one-arg boolean function that returns true when the item should be added.
// @param testObj [optional] the receiver for the test function (global if undefined or null)
// @param result [optional] an array. When define the selected items are added to this array, otherwise a new array is used.
//
//#import Array.prototype.forEach
//
abego.select = function(array,test,testObj,result) {
	if (!result) result = [];
	array.forEach(function(t) {
		if (test.call(testObj,t)) 
			result.push(t);
		});
	return result;
};

// A portable way to "consume an event"
// 
// (Uses "stopPropagation" and "preventDefault", but will also "cancelBubble",
// even though this is a "non-standard method" , just in case).
//
abego.consumeEvent = function(e) {
	if (e.stopPropagation) e.stopPropagation();
	if (e.preventDefault) e.preventDefault();
	e.cancelBubble = true;
	e.returnValue = true;
};

// Returns a string with all characters in reText that have "diacritic" variations 
// changed to regular expressions that also include these diacritics.
//
// E.g. the character "A" is also matched by Umlaut-A, A-with-grave, A-with-acute etc.
//
abego.expandToDiacritics = function(reText) {
    if (!reText)
        return reText;
        
	reText = reText.replace(/A/g,"[A\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6]");
	reText = reText.replace(/C/g,"[C\u00C7]");
	reText = reText.replace(/E/g,"[E\u00C8\u00C9\u00CA\u00CB]");
	reText = reText.replace(/I/g,"[I\u00CC\u00CD\u00CE\u00CF]");
	reText = reText.replace(/N/g,"[N\u00D1]");
	reText = reText.replace(/O/g,"[O\u00D2\u00D3\u00D4\u00D5\u00D6\u00D8]");
	reText = reText.replace(/U/g,"[U\u00D9\u00DA\u00DB\u00DC]");
	reText = reText.replace(/Y/g,"[Y\u00DD]");
	reText = reText.replace(/ss/g,"(?:ss|\u00DF)");
	reText = reText.replace(/a/g,"[a\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5]");
	reText = reText.replace(/c/g,"[c\u00E7]");
	reText = reText.replace(/e/g,"[e\u00E8\u00E9\u00EA\u00EB]");
	reText = reText.replace(/i/g,"[i\u00EC\u00ED\u00EE\u00EF]");
	reText = reText.replace(/n/g,"[n\u00F1]");
	reText = reText.replace(/o/g,"[o\u00F2\u00F3\u00F4\u00F5\u00F6\u00F8]");
	reText = reText.replace(/u/g,"[u\u00F9\u00FA\u00FB\u00FC]");
	reText = reText.replace(/y/g,"[y\u00FD\u00FF]");

	return reText;
}

// Class abego.TiddlerFilterTerm =================================================================
//
// Used to check if a tiddler contains a given text.
//
// A list of fields (standard and/or extended) may be specified to restrict the search to certain fields. 
//
// When no explicit fields are given the fields defined by defaultFields are checked, plus all extended 
// fields (when options.withExtendedFields is true).
//
// @param options [may be null/undefined]
//		options.fields @seeParam abego.MultiFieldRegExpTester.fields
// 		options.withExtendedFields @seeParam abego.MultiFieldRegExpTester.withExtendedFields  
// 		options.caseSensitive [Default: false]
// 		options.fullWordMatch [Default: false]
// 		options.textIsRegExp [Default: false] when true the given text is already a regExp
//
//#import abego.MultiFieldRegExpTester
//
abego.TiddlerFilterTerm = function(text,options) {
	if (!options) options = {};

	var reText = text;
	if (!options.textIsRegExp) {
		reText = text.escapeRegExp();
		if (options.fullWordMatch) 
			reText = "\\b"+reText+"\\b";
	}
	reText = abego.expandToDiacritics(reText);

	var regExp = new RegExp(reText, "m"+(options.caseSensitive ? "" : "i"));

	this.tester = new abego.MultiFieldRegExpTester(regExp, options.fields, options.withExtendedFields);
}

abego.TiddlerFilterTerm.prototype.test = function(tiddler) {
	return this.tester.test(tiddler);
}

// Recognize a string like
//     "Some Title. Some content text #Tag1 #Tag2 Tag3"
// with the tags and the text being optional.
// Also the period at the end of the title is optional when no content text is specified)
//
// Returns the result in an object with properties "title" and "params",
// with "params" following the parseParams format, containing the "tag" and "text" arguments.
//
abego.parseNewTiddlerCommandLine = function(s) {
	var m = /(.*?)\.(?:\s+|$)([^#]*)(#.*)?/.exec(s);
	if (!m) 
		m = /([^#]*)()(#.*)?/.exec(s);
	if (m) {
		var r;
		if (m[3]) {
			var s2 = m[3].replace(/#/g,"");
			r = s2.parseParams("tag");
		} else
			r = [[]];
			
		// add the text parameter
		var text = m[2]?m[2].trim():"";
		r.push({name: "text", value: text});
		r[0].text = [text];
		
		return {title: m[1].trim(), params: r}; 
	} else
		return {title: s.trim(),params: [[]]};
}	
// 		options.defaultFields [@seeOptionDefault abego.TiddlerFilterTerm.fields] fields to check when no fields are explicitly specified in queryText.
// 		options.withExtendedFields [@seeOptionDefault abego.TiddlerFilterTerm.withExtendedFields] when true and no fields are explicitly specified in queryText also the extended fields are considered (in addition to the ones in defaultFields).
// @seeOptions abego.TiddlerFilterTerm (-fields -fullWordMatch -withExtendedFields)
//
//#import abego.getBracedText
//#import abego.copyOptions
//#import abego.TiddlerFilterTerm
//
abego.parseTiddlerFilterTerm = function(queryText,offset,options) {
	
	// group 1: {...} 		(JavaScript expression)
	// group 2: '=' 		(full word match (optional))
	// group 3: [!%#] 		(field selection short cuts)
	// group 4: fieldName ':'
	// group 5: String literal "..."
	// group 6: RegExp literal /.../
	// group 7: scheme '://' nonSpaceChars
	// group 8: word
	var re = /\s*(?:(?:\{([^\}]*)\})|(?:(=)|([#%!])|(?:(\w+)\s*\:(?!\/\/))|(?:(?:("(?:(?:\\")|[^"])+")|(?:\/((?:(?:\\\/)|[^\/])+)\/)|(\w+\:\/\/[^\s]+)|([^\s\)\-\"]+)))))/mg; // " <- The syntax highlighting of my editors gets confused without this quote
	var shortCuts = {'!':'title','%':'text','#':'tags'};
	
	var fieldNames = {};
	var fullWordMatch;
	re.lastIndex = offset;
	while (1) {
		var i = re.lastIndex;
		var m = re.exec(queryText);
		if (!m || m.index != i) 
			throw "Word or String literal expected";
		if (m[1]) {
			var lastIndexRef = {};
			var code = abego.getBracedText(queryText,0,lastIndexRef);
			if (!code)
				throw "Invalid {...} syntax";
			var f = Function("tiddler","return ("+code+");");
			return {func: f,
					lastIndex:lastIndexRef.lastIndex,
					markRE: null};
		}
		if (m[2])
			fullWordMatch = true;
		else if (m[3]) 
			fieldNames[shortCuts[m[3]]] = 1;
		else if (m[4]) 
			fieldNames[m[4]] = 1;
		else {
			var textIsRegExp = m[6];
			var text = m[5] ? window.eval(m[5]) : m[6] ? m[6] :  m[7] ? m[7] : m[8];
			
			var options = abego.copyOptions(options);
			options.fullWordMatch = fullWordMatch;
			options.textIsRegExp = textIsRegExp;

			var fields = [];
			for (var n in fieldNames)
				fields.push(n);
			if (fields.length == 0) {
				options.fields = options.defaultFields;
			} else {
				options.fields = fields;
				options.withExtendedFields	= false;
			}	
			var term = new abego.TiddlerFilterTerm(text,options);
			var markREText = textIsRegExp ? text : text.escapeRegExp();
			if (markREText && fullWordMatch)
				markREText = "\\b"+markREText+"\\b";
            markREText = abego.expandToDiacritics(markREText);
			return {func: function(tiddler) {return term.test(tiddler);},
					lastIndex:re.lastIndex,
					markRE: markREText ? "(?:"+markREText+")" : null};
		}
	}
};

// Class abego.BoolExp =================================================================
//
// Allows the execution/evaluation of a boolean expression, according to this syntax:
//
// boolExpression    : unaryExpression (("AND"|"OR"|"&&"|"||")? unaryExpression)*
//                   ;
//
// unaryExpression   : ("not"|"-")? primaryExpression
//                   ;
//
// primaryExpression : "(" boolExpression ")" 
//                   | Term
//                   ;
//
// For flexibility the Term syntax is defined by a separate parse function.
//
// Notice that there is no precedence between "AND" and "OR" operators, i.e. they are evaluated from left to right.
//
// To evaluate the expression in a given context use code like this:
//
//	var be = new abego.BoolExp(s, termParseFunc);
//  var result = be.exec(context);
// 
// @param s the text defining the expression 
// @param parseTermFunc a Function(text,offset,options) that parses the text starting at offset for a "Term" and returns an object with properties {func: Function(context), lastIndex: ...}. func is the function to be used to evaluate the term in the given context.
// @param options [may be null/undefined] (is also passed to the parseTermFunc)
// 			options.defaultOperationIs_OR [Default: false] When true the concatenation of unaryExpressions (without an operator) is interpreted as an "OR", otherwise as an "AND".
// 			options.caseSensitive [default: false]
//
abego.BoolExp = function(s, parseTermFunc, options) {
	this.s = s;
	var defaultOperationIs_OR = options && options.defaultOperationIs_OR;
	
	var reStart = /\s*(?:(\-|(?:\bnot\b))|(\())/gi; 		// group 1: NOT, group2 "("
	var reCloseParenthesis = /\s*\)/g;  			// match )
	var reAndOr = /\s*(?:((?:\band\b)|\&\&)|((?:\bor\b)|\|\|))/gi; 	// group 1: AND, group 2: OR
	var reNonWhiteSpace = /\s*[^\)\s]/g;
	
	var reNot_Parenthesis = /\s*(\-|(?:\bnot\b))?(\s*\()?/gi;
	
	var parseBoolExpression; //#Pre-declare function name to avoid problem with "shrinkSafe"
	
	var parseUnaryExpression = function(offset) {
		reNot_Parenthesis.lastIndex = offset;
		var m = reNot_Parenthesis.exec(s);
		var negate;
		var result;
		if (m && m.index == offset) {
			offset += m[0].length;
			negate = m[1];
			if (m[2]) {
				// case:  (...)
				var e = parseBoolExpression(offset);
				reCloseParenthesis.lastIndex = e.lastIndex;
				if (!reCloseParenthesis.exec(s))
					throw "Missing ')'";
				result = {func: e.func, lastIndex: reCloseParenthesis.lastIndex, markRE: e.markRE};
			}
		}
		if (!result)
			result = parseTermFunc(s,offset,options);

		if (negate) {
			result.func = (function(f){return function(context) {return !f(context);}})(result.func);
			// don't mark patterns that are negated
			// (This is essential since the marking may also be used to calculate "ranks". If we
			// would also count the negated matches (i.e. that should not exist) the rank may get too high)
			result.markRE = null;
		}
		return result;
	};

	parseBoolExpression = function(offset) {
		var result = parseUnaryExpression(offset);
		while (1) {
			var l = result.lastIndex;
			reAndOr.lastIndex = l;
			var m = reAndOr.exec(s);
			var isOrCase;
			var nextExp;
			if (m && m.index == l) {
				isOrCase = !m[1];
				nextExp = parseUnaryExpression(reAndOr.lastIndex);
			} else {
				// no "AND" or "OR" found. 
				// Maybe it is a concatenations of parseUnaryExpression without operators
				try {
					nextExp = parseUnaryExpression(l);
				} catch (e) {
					// no unary expression follows. We are done
					return result;
				}
				isOrCase = defaultOperationIs_OR;
			}
			result.func = (function(func1, func2, isOrCase) {
					return isOrCase
						? function(context) {return func1(context) || func2(context);}
						: function(context) {return func1(context) && func2(context);};
				})(result.func,nextExp.func,isOrCase);
			result.lastIndex = nextExp.lastIndex;
			if (!result.markRE)
				result.markRE = nextExp.markRE;
			else if (nextExp.markRE) 
				result.markRE = result.markRE + "|" + nextExp.markRE;
		}
	};
	
	var expr = parseBoolExpression(0);
	this.evalFunc = expr.func;
	if (expr.markRE)
		this.markRegExp = new RegExp(expr.markRE, options.caseSensitive ? "mg" : "img");
}

abego.BoolExp.prototype.exec = function() {
	return this.evalFunc.apply(this,arguments);
};

abego.BoolExp.prototype.getMarkRegExp = function() {
	return this.markRegExp;
};

abego.BoolExp.prototype.toString = function() {
	return this.s;
};

// Class abego.MultiFieldRegExpTester ==================================================================
//
// @param fields [optional; Default: ["title","text","tags"]] array of names of fields to be considered
// @param withExtendedFields [optional; Default: false] when true also extended fields are considered (in addition to the ones given in 'fields')
//
abego.MultiFieldRegExpTester = function(re, fields, withExtendedFields) {
	this.re = re;
	this.fields = fields ? fields : ["title","text","tags"];
	this.withExtendedFields = withExtendedFields;
}

// Returns the name of the first field found that value succeeds the given test,
// or null when no such field is found
//
abego.MultiFieldRegExpTester.prototype.test = function(tiddler) {
	var re = this.re;
	// Check the fields explicitly specified
	for (var i = 0; i < this.fields.length; i++) {
		var s = store.getValue(tiddler, this.fields[i]);
		if (typeof s == "string" && re.test(s))
			return this.fields[i];		
	}
	// Check the extended fields (if required)
	if (this.withExtendedFields) 
		return store.forEachField(
				tiddler,
				function(tiddler, fieldName, value) {
					return typeof value == "string" && re.test(value)?fieldName:null;
				}, true);
		
	return null;
}

// Class abego.TiddlerQuery ==================================================================
//
//#import abego.select
//#import abego.MultiFieldRegExpTester
//
abego.TiddlerQuery = function(queryText,caseSensitive,useRegExp,defaultFields,withExtendedFields) {
	if (useRegExp) {
		this.regExp = new RegExp(queryText, caseSensitive ? "mg" : "img");
		this.tester = new abego.MultiFieldRegExpTester(this.regExp, defaultFields, withExtendedFields);
	} else {
		this.expr = new abego.BoolExp(
				queryText,
				abego.parseTiddlerFilterTerm, {
				defaultFields: defaultFields,
				caseSensitive: caseSensitive,
				withExtendedFields: withExtendedFields});
	}
	
	this.getQueryText = function() {
		return queryText;
	};
	this.getUseRegExp = function() {
		return useRegExp;
	};
	this.getCaseSensitive = function() {
		return caseSensitive;
	};
	this.getDefaultFields = function() {
		return defaultFields;
	};
	this.getWithExtendedFields = function() {
		return withExtendedFields;
	};
}

// Returns true iff the query includes the given tiddler
//
// @param tiddler [may be null/undefined]
//
abego.TiddlerQuery.prototype.test = function(tiddler) {
	if (!tiddler) return false;
	if (this.regExp) {
		return this.tester.test(tiddler);
	}
	return this.expr.exec(tiddler);
};

// Returns an array with those tiddlers from the tiddlers array that match the query.
//
abego.TiddlerQuery.prototype.filter = function(tiddlers) {
	return abego.select(tiddlers,this.test,this);
};

abego.TiddlerQuery.prototype.getMarkRegExp = function() {
	if (this.regExp) {
		// Only use the regExp for marking when it does not match the empty string.
		return "".search(this.regExp) >= 0 ? null :  this.regExp;
	}
	return this.expr.getMarkRegExp();
};

abego.TiddlerQuery.prototype.toString = function() {
	return (this.regExp ? this.regExp : this.expr).toString();
};

// Class abego.PageWiseRenderer ================================================
//
// Subclass or instance must implement getItemsPerPage function;
// They should also implement onPageChanged and refresh the container of the
// PageWiseRenderer on that event.
//
//#import abego.toInt
//
abego.PageWiseRenderer = function() {
	this.firstIndexOnPage = 0; // The index of the first item of the lastResults list displayed on the search result page
};

merge(abego.PageWiseRenderer.prototype, {
	setItems: function(items) {
		this.items = items;
		this.setFirstIndexOnPage(0);
	},
	
	// Maximum number of pages listed in the navigation bar (before or after the current page)
	//
	getMaxPagesInNavigation: function() {
		return 10;
	},
	
	getItemsCount: function(items) {
		return this.items ? this.items.length : 0;
	},
	
	getCurrentPageIndex: function() {
		return Math.floor(this.firstIndexOnPage / this.getItemsPerPage());
	},
	
	getLastPageIndex: function() {
		return Math.floor((this.getItemsCount()-1) / this.getItemsPerPage())
	},
	
	setFirstIndexOnPage: function(index) {
		this.firstIndexOnPage = Math.min(Math.max(0, index), this.getItemsCount()-1);
	},
	
	getFirstIndexOnPage: function() {
		// Ensure that the firstIndexOnPage is really a page start. 
		// This may have become violated when getItemsPerPage has changed,
		// (e.g. when switching between previewText and simple mode.)
		this.firstIndexOnPage = Math.floor(this.firstIndexOnPage / this.getItemsPerPage()) * this.getItemsPerPage();
	
		return this.firstIndexOnPage;
	},
	
	getLastIndexOnPage: function() {
		return Math.min(this.getFirstIndexOnPage()+this.getItemsPerPage()-1, this.getItemsCount()-1);
	},
	
	onPageChanged: function(pageIndex,oldPageIndex) {
	},
	
	renderPage: function(itemRenderer) {
		if (itemRenderer.beginRendering)
			itemRenderer.beginRendering(this);
		try {
			// When there are items found add them to the result page (pagewise)
			if (this.getItemsCount()) {
				// Add the items of the current page
				var lastIndex = this.getLastIndexOnPage();
				var iInPage = -1;
				for (var i=this.getFirstIndexOnPage(); i <= lastIndex; i++) {
					iInPage++;
					
					itemRenderer.render(this,this.items[i],i,iInPage);
				}
			}
		} finally {
			if (itemRenderer.endRendering)
				itemRenderer.endRendering(this);
		}
	},
	
	addPageNavigation: function(place) {
		if (!this.getItemsCount()) return;
	
		var self = this;
		var onNaviButtonClick = function(e) {
			if (!e) var e = window.event;

			abego.consumeEvent(e);

			var pageIndex = abego.toInt(this.getAttribute("page"),0);
			var oldPageIndex = self.getCurrentPageIndex();
			if (pageIndex == oldPageIndex)
				return;
			var index = pageIndex * self.getItemsPerPage();
			self.setFirstIndexOnPage(index);
			self.onPageChanged(pageIndex,oldPageIndex);	
		};
	
		var button;
		var currentPageIndex = this.getCurrentPageIndex();
		var lastPageIndex = this.getLastPageIndex();
		if (currentPageIndex > 0) {
			button = createTiddlyButton(place, "Previous", "Go to previous page (Shortcut: Alt-'<')", onNaviButtonClick, "prev");
			button.setAttribute("page",(currentPageIndex-1).toString());
			button.setAttribute("accessKey","<");
		}
	
		for (var i = -this.getMaxPagesInNavigation(); i < this.getMaxPagesInNavigation(); i++) {
			var pageIndex = currentPageIndex+i;
			if (pageIndex < 0) continue;
			if (pageIndex > lastPageIndex) break;
	
			var pageNo = (i+currentPageIndex+1).toString();
			var buttonClass = pageIndex == currentPageIndex ? "currentPage" : "otherPage";
			button = createTiddlyButton(place, pageNo, "Go to page %0".format([pageNo]), onNaviButtonClick, buttonClass);
			button.setAttribute("page",(pageIndex).toString());
		}
		
		if (currentPageIndex < lastPageIndex) {
			button = createTiddlyButton(place, "Next", "Go to next page (Shortcut: Alt-'>')", onNaviButtonClick, "next");
			button.setAttribute("page",(currentPageIndex+1).toString());
			button.setAttribute("accessKey",">");
		}
	}
});

// Class abego.LimitedTextRenderer ===========================================================
//
// Renders a given text, ensuring that a given limit of number of characters 
// is not exceeded.
//
// A "markRegExp" may be specified. Substring matching this regular expression 
// ("matched strings") are rendered with the class "marked". 
//
// if the given text is longer than the limit the matched strings are preferred 
// to be included in the rendered text (with some leading and trailing "context text"). 
// 
// Example:
//     var renderer = new abego.LimitedTextRenderer();
//
//     var place = ... // a DOM element that should contain the rendered (limited) text
//     var s = "This is another 'Hello World' example, as saying 'Hello' is always nice. So let's say it again: >Hello!<";
//     var maxLen = 50;
//     var markRE = /hello/gi;
//     renderer.render(place,s,maxLen,markRE);
// 
//#import abego.createEllipsis
//
abego.LimitedTextRenderer = function() {
	var minMatchWithContextSize = 40; 
	var maxMovementForWordCorrection = 4; // When a "match" context starts or end on a word the context borders may be changed to at most this amount to include or exclude the word.
	
	
	//----------------------------------------------------------------------------
	//
	// Ranges
	//
	// Objects with a "start" and "end" property (not a specific class). 
	// 
	// In a corresponding "Ranges array" these objects are sorted by their start 
	// and no Range object intersects/touches any other in the array.
	//
	//----------------------------------------------------------------------------
	
	// Adds the Range [startIndex,endIndex[ to the ranges, ensuring that the Ranges
	// in the array are sorted by their start and no Range object 
	// intersects/touches any other in the array (i.e. possibly the new Range is 
	// "merged" with existing ranges)
	//
	// @param ranges array of Range objects
	//
	var addRange = function(ranges, startIndex, endIndex) {
		var n = ranges.length;
		
		// When there are no ranges in ranges, just add it.
		if (n == 0) {
			ranges.push({start: startIndex, end: endIndex});
			return;
		}
		
		var i = 0;
		for (; i < n; i++) {
			var range = ranges[i];
			
			// find the first range that intersects or "touches" [startIndex, endIndex[
			if (range.start <= endIndex && startIndex <= range.end) {
				// Found.
				
				var r;
				// find the first range behind the new range that does not interfere
				var rIndex = i+1;
				for (; rIndex < n; rIndex++) {
					r = ranges[rIndex];
					if (r.start > endIndex || startIndex > range.end) {
						break;
					}
				}
				
				// Replace the ranges i to rIndex-1 with the union of the new range with these ranges.
				var unionStart = startIndex;
				var unionEnd = endIndex;
				for (var j = i; j < rIndex; j++) {
					r = ranges[j];
					unionStart = Math.min(unionStart, r.start);
					unionEnd = Math.max(unionEnd, r.end);
				}
				ranges.splice(i, rIndex-i, {start: unionStart, end: unionEnd});
				return;			
			}
			
			// if we found a range R that is right of the new range there is no
			// intersection and we can insert the new range before R.
			if (range.start > endIndex) {
				break;
			}
		}
	
		// When we are here the new range does not interfere with any range in ranges and
		// i is the index of the first range right to it (or ranges.length, when the new range
		// becomes the right most range). 
	
		ranges.splice(i, 0, {start: startIndex, end: endIndex});
	};
	
	// Returns the total size of all Ranges in ranges
	//
	var getTotalRangesSize = function(ranges) {
		var totalRangeSize = 0;
		for (var i=0; i < ranges.length; i++) {
			var range = ranges[i];
			totalRangeSize += range.end-range.start;
		}
		return totalRangeSize;
	};
	
	//----------------------------------------------------------------------------
	
	
	var isWordChar = function(c) {
		return (c >= "a" && c <= "z") || (c >= "A" && c <= "Z") || c == "_";
	};
	
	// Returns the bounds of the word in s around offset as a {start: , end:} object.
	//
	// Returns null when the char at offset is not a word char.
	//
	var getWordBounds = function(s, offset) {
		// Handle the "offset is not in word" case
		if (!isWordChar(s[offset])) return null;
	
		for (var i = offset-1; i >= 0 && isWordChar(s[i]); i--) 
			{/*empty*/}
			
		var startIndex = i+1;
		var n = s.length;
		for (i = offset+1; i < n && isWordChar(s[i]); i++) 
			{/*empty*/}
		
		return {start: startIndex, end: i};
	};
	
	var moveToWordBorder = function(s, offset, isStartOffset) {
		var wordBounds;
		if (isStartOffset) {
			wordBounds = getWordBounds(s, offset);
		} else {
			if (offset <= 0) return offset;
			wordBounds = getWordBounds(s, offset-1);
		}
		if (!wordBounds) return offset;
		
		if (isStartOffset) {
			if (wordBounds.start >= offset-maxMovementForWordCorrection) return wordBounds.start;
			if (wordBounds.end <= offset+maxMovementForWordCorrection) return wordBounds.end;
		} else {
			if (wordBounds.end <= offset+maxMovementForWordCorrection) return wordBounds.end;
			if (wordBounds.start >= offset-maxMovementForWordCorrection) return wordBounds.start;
		}
		return offset;
	};
	
	
	
	// Splits s into a sequence of "matched" and "unmatched" substrings, using the 
	// matchRegExp to do the matching.
	// 
	// Returns an array of objects with a "text" property containing the substring text. 
	// Substrings that are "matches" also contain a boolean "isMatch" property set to true.
	// 
	// @param matchRegExp [may be null] when null no matching is performed and the returned 
	// 			array just contains one item with s as its text
	// 
	var getTextAndMatchArray = function(s, matchRegExp) {
		var result = [];
		if (matchRegExp) {
			var startIndex = 0;
			var n = s.length;
			var currentLen = 0;
			do {
				matchRegExp.lastIndex = startIndex;
				var match = matchRegExp.exec(s);
				if (match) {
					if (startIndex < match.index) {
						var t = s.substring(startIndex, match.index);
						result.push({text:t});
					}
					result.push({text:match[0], isMatch:true});
					startIndex = match.index + match[0].length;
				} else {
					result.push({text: s.substr(startIndex)});
					break;
				}
			} while (true);
		} else {
			result.push({text: s});
		}
		return result;
	};
	
	
	
	var getMatchedTextCount = function(textAndMatches) {
		var result = 0;
		for (var i=0; i < textAndMatches.length; i++) {
			if (textAndMatches[i].isMatch) {
				result++;
			}
		}
		return result;	
	};
	
	
	
	var getContextRangeAround = function(s, startIndex, endIndex, matchCount, maxLen) {
		// Partition the available space into equal sized areas for each match and one 
		// for the text start.
		// But the size should not go below a certain limit
		var size = Math.max(Math.floor(maxLen/(matchCount+1)), minMatchWithContextSize);
		
		// Substract the size of the range to get the size of the context.
		var contextSize = Math.max(size-(endIndex-startIndex), 0);
		// Two thirds of the context should be before the match, one third after.
		var contextEnd = Math.min(Math.floor(endIndex+contextSize/3), s.length);
		var contextStart = Math.max(contextEnd - size, 0);
	
		// If the contextStart/End is inside a word and the end of the word is
		// close move the pointers accordingly to make the text more readable.
		contextStart = moveToWordBorder(s, contextStart, true);
		contextEnd = moveToWordBorder(s, contextEnd, false);
		
		return {start: contextStart, end: contextEnd};
	};
	
	// Get all ranges around matched substrings with their contexts
	//
	var getMatchedTextWithContextRanges = function(textAndMatches, s, maxLen) {
		var ranges = [];
		var matchCount = getMatchedTextCount(textAndMatches);
		var pos = 0;
		for (var i=0; i < textAndMatches.length; i++) {
			var t = textAndMatches[i];
			var text = t.text;
			if (t.isMatch) {
				var range = getContextRangeAround(s, pos, pos+text.length, matchCount, maxLen);
				addRange(ranges, range.start, range.end);
			}
			pos += text.length;
		}
		return ranges;
	};
	
	var fillUpRanges = function(s, ranges, maxLen) {
		var remainingLen = maxLen - getTotalRangesSize(ranges);
		while (remainingLen > 0) {
			if (ranges.length == 0) {
				// No matches added yet. Make one large range.
				addRange(ranges, 0, moveToWordBorder(s, maxLen, false));
				return;
			} else {
				var range = ranges[0];
				var startIndex;
				var maxEndIndex;
				if (range.start == 0) {
					// The first range already starts at the beginning of the string.
	
					// When there is a second range fill to the next range start or to the maxLen.
					startIndex = range.end;
					if (ranges.length > 1) {
						maxEndIndex =  ranges[1].start;
					} else {
						// Only one range. Add a range after that with the complete remaining len 
						// (corrected to "beautify" the output)
						addRange(ranges, startIndex, moveToWordBorder(s, startIndex+remainingLen, false));
						return;
					}
				} else {
					// There is unused space between the start of the text and the first range.
					startIndex = 0;
					maxEndIndex = range.start;
				}
				var endIndex = Math.min(maxEndIndex, startIndex+remainingLen);
				addRange(ranges, startIndex, endIndex);
				remainingLen -= (endIndex-startIndex);
			}
		}
	};
	
	
	// Write the given ranges of s, using textAndMatches for marking portions of the text.
	//
	var writeRanges = function(place, s, textAndMatches, ranges, maxLen) {
		if (ranges.length == 0) return;
		
		// Processes the text between startIndex and endIndex of the textAndMatches
		// "writes" them (as DOM elements) at the given place, possibly as "marked" text.
		//
		// When endIndex is not the end of the full text an ellisis is appended. 
		//
		var writeTextAndMatchRange = function(place, s, textAndMatches, startIndex, endIndex) {
			var t;
			var text;
			
			// find the first text item to write
			var pos = 0;
			var i = 0;
			var offset = 0;
			for (;i < textAndMatches.length; i++) {
				t = textAndMatches[i];
				text = t.text;
				if (startIndex < pos+text.length) {
					offset = startIndex - pos;
					break;
				}
				pos += text.length;
			}
			
			var remainingLen = endIndex - startIndex;
			for (; i < textAndMatches.length && remainingLen > 0; i++) {
				t = textAndMatches[i];
				text = t.text.substr(offset);
				offset = 0;
				if (text.length > remainingLen) text = text.substr(0,remainingLen);
				
				if (t.isMatch) {
					createTiddlyElement(place,"span",null,"marked",text);
				} else {
					createTiddlyText(place, text);
				}
				remainingLen -= text.length;
			}
			
			if (endIndex < s.length) {
				abego.createEllipsis(place);
			}
		};
		
		// When the first range is not at the start of the text write an ellipsis("...")
		// (Ellipses between ranges are written in the writeTextAndMatchRange method)
		if (ranges[0].start > 0) abego.createEllipsis(place);
	
		var remainingLen = maxLen;
		for (var i = 0; i < ranges.length && remainingLen > 0; i++) {
			var range = ranges[i];
			var len = Math.min(range.end - range.start, remainingLen);
			writeTextAndMatchRange(place, s, textAndMatches, range.start, range.start+len);
			remainingLen -= len;
		}
	};
	
	this.render = function(place,s,maxLen,markRegExp) {
		if (s.length < maxLen) maxLen = s.length;
		
		var textAndMatches = getTextAndMatchArray(s, markRegExp);
		
		var ranges = getMatchedTextWithContextRanges(textAndMatches, s, maxLen);
		
		// When the maxLen is not yet reached add more ranges 
		// starting from the beginning until either maxLen or 
		// the end of the string is reached.
		fillUpRanges(s, ranges, maxLen);
	
		writeRanges(place, s, textAndMatches, ranges, maxLen);
	};
};



(function() {

function alertAndThrow(msg) {
	alert(msg);
	throw msg;
};

if (version.major < 2 || (version.major == 2 && version.minor < 1)) 
	alertAndThrow("YourSearchPlugin requires TiddlyWiki 2.1 or newer.\n\nCheck the archive for YourSearch plugins\nsupporting older versions of TiddlyWiki.\n\nArchive: http://tiddlywiki.abego-software.de/archive");

abego.YourSearch = {};

//----------------------------------------------------------------------------
// The Search Core
//----------------------------------------------------------------------------

// Model Variables
var lastResults; // Array of tiddlers that matched the last search
var lastQuery; // The last Search query (TiddlerQuery)

var setLastResults = function(array) {
	lastResults = array;
};

var getLastResults = function() {
	return lastResults ? lastResults : [];
};

var getLastResultsCount = function() {
	return lastResults ? lastResults.length : 0;
};

// Standard Ranking Weights
var matchInTitleWeight = 4;
var precisionInTitleWeight = 10;
var matchInTagsWeight = 2;

var getMatchCount = function(s, re) {
	var m = s.match(re);
	return m ? m.length : 0;
};

var standardRankFunction = function(tiddler, query) {	
	// Count the matches in the title and the tags
	var markRE = query.getMarkRegExp();
	if (!markRE) return 1;
	
	var matchesInTitle = tiddler.title.match(markRE);
	var nMatchesInTitle =  matchesInTitle ? matchesInTitle.length : 0;
	var nMatchesInTags = getMatchCount(tiddler.getTags(), markRE);

	// Calculate the "precision" of the matches in the title as the ratio of
	// the length of the matches to the total length of the title.
	var lengthOfMatchesInTitle = matchesInTitle ? matchesInTitle.join("").length : 0;
	var precisionInTitle = tiddler.title.length > 0 ? lengthOfMatchesInTitle/tiddler.title.length : 0;
	
	// calculate a weighted score
	var rank= nMatchesInTitle * matchInTitleWeight 
			+ nMatchesInTags * matchInTagsWeight 
			+ precisionInTitle * precisionInTitleWeight 
			+ 1;

	return rank;
};

// @return Tiddler[]
//
var findMatches = function(store, searchText,caseSensitive,useRegExp,sortField,excludeTag) {
	lastQuery = null;
	
	var candidates = store.reverseLookup("tags",excludeTag,false);
	try {
		var defaultFields = [];
		if (config.options.chkSearchInTitle) defaultFields.push("title");
		if (config.options.chkSearchInText) defaultFields.push("text");
		if (config.options.chkSearchInTags) defaultFields.push("tags");
		lastQuery = new abego.TiddlerQuery(
				searchText,caseSensitive, useRegExp,defaultFields,config.options.chkSearchExtendedFields); 
	} catch (e) {
		// when an invalid query is given no tiddlers are matched
		return [];
	}

	var results = lastQuery.filter(candidates);

	// Rank the results
	var rankFunction = abego.YourSearch.getRankFunction();
	for (var i = 0; i < results.length; i++) {
		var tiddler = results[i];
		var rank = rankFunction(tiddler, lastQuery);
		// Add the rank information to the tiddler.
		// This is used during the sorting, but it may also
		// be used in the result, e.g. to display some "relevance" 
		// information in the result	
		tiddler.searchRank = rank;	
	}
	
	// sort the result, taking care of the rank and the sortField	
	if(!sortField) {
		sortField = "title";
	}
	
	var sortFunction = function (a,b) {
		var searchRankDiff = a.searchRank - b.searchRank;
		if (searchRankDiff == 0) {
			if (a[sortField] == b[sortField]) {
				return(0); 
			} else {
				return (a[sortField] < b[sortField]) ? -1 : +1; 
			}
		} else {
			return (searchRankDiff > 0) ? -1 : +1; 
		}
	};
	results.sort(sortFunction);
	return results;
};

//----------------------------------------------------------------------------
// The Search UI (Result page)
//----------------------------------------------------------------------------


// Visual appearance of the result page
var maxCharsInTitle = 80;
var maxCharsInTags = 50;
var maxCharsInText = 250;
var maxCharsInField = 50;

var itemsPerPageDefault = 25; // Default maximum number of items on one search result page
var itemsPerPageWithPreviewDefault = 10; // Default maximum number of items on one search result page when PreviewText is on

// DOM IDs
var yourSearchResultID = "yourSearchResult";
var yourSearchResultItemsID = "yourSearchResultItems";

var lastSearchText; // The last search text, as passed to findMatches

var resultElement; // The (popup) DOM element containing the search result [may be null]
var searchInputField; // The "search" input field
var searchButton; // The "search" button
var lastNewTiddlerButton;

var initStylesheet = function() {
	if (version.extensions.YourSearchPlugin.styleSheetInited) 
		return;
		
	version.extensions.YourSearchPlugin.styleSheetInited = true;
	setStylesheet(store.getTiddlerText("YourSearchStyleSheet"),"yourSearch");
}

var isResultOpen = function() {
	return resultElement != null && resultElement.parentNode == document.body;
};

var closeResult = function() {
	if (isResultOpen()) {
		document.body.removeChild(resultElement);
	}
};

// Closes the Search Result window and displays the tiddler 
// defined by the "tiddlyLink" attribute of this element
//
var closeResultAndDisplayTiddler = function(e)
{
	closeResult();
	
	var title = this.getAttribute("tiddlyLink");
	if(title) {
		var withHilite = this.getAttribute("withHilite");
		var oldHighlightHack = highlightHack;
		if (withHilite && withHilite=="true" && lastQuery) {
			highlightHack = lastQuery.getMarkRegExp();
		}
		story.displayTiddler(this,title);
		highlightHack = oldHighlightHack;
	}
	return(false);
};

// Adjusts the resultElement's size and position, relative to the search input field.
//
var adjustResultPositionAndSize = function() {
	if (!searchInputField) return;
	
	var root = searchInputField;
	
	// Position the result below the root and resize it if necessary.
	var rootLeft = findPosX(root);
	var rootTop = findPosY(root);
	var rootHeight = root.offsetHeight;
	var popupLeft = rootLeft;
	var popupTop = rootTop + rootHeight;

	// Make sure the result is not wider than the window
	var winWidth = findWindowWidth();
	if (winWidth < resultElement.offsetWidth) {
		resultElement.style.width = (winWidth - 100)+"px";
		winWidth = findWindowWidth();
	}

	// Ensure that the left and right of the result are not
	// clipped by the window. Move it to the left or right, if necessary.	
	var popupWidth = resultElement.offsetWidth;
	if(popupLeft + popupWidth > winWidth)
		popupLeft = winWidth - popupWidth-30;
	if (popupLeft < 0) popupLeft = 0;
	
	// Do the actual moving
	resultElement.style.left = popupLeft + "px";
	resultElement.style.top = popupTop + "px";
	resultElement.style.display = "block";
};

var scrollVisible = function() {
	// Scroll the window to make the result page (and the search Input field) visible.
	if (resultElement) window.scrollTo(0,ensureVisible(resultElement));
	if (searchInputField) window.scrollTo(0,ensureVisible(searchInputField));
};

// Makes sure the result page has a good size and position and visible
// (may scroll the window)
//
var	ensureResultIsDisplayedNicely = function() {
	adjustResultPositionAndSize();
	scrollVisible();
};



var indexInPage; // The index (in the current page) of the tiddler currently rendered.
var currentTiddler; // While rendering the page the tiddler that is currently rendered.

var pager = new abego.PageWiseRenderer();

var MyItemRenderer = function(parent) {
	// Load the template how to display the items that represent a found tiddler
	this.itemHtml = store.getTiddlerText("YourSearchItemTemplate");
	if (!this.itemHtml) alertAndThrow("YourSearchItemTemplate not found");
	
	// Locate the node that shall contain the list of found tiddlers
	this.place = document.getElementById(yourSearchResultItemsID);
	if(!this.place)
		this.place = createTiddlyElement(parent,"div",yourSearchResultItemsID);
};

merge(MyItemRenderer.prototype,{
	render: function(pager,object,index,indexOnPage) {
		// Define global variables, referenced by macros during applyHtmlMacros
		indexInPage = indexOnPage;
		currentTiddler = object;
		
		var item = createTiddlyElement(this.place,"div",null, "yourSearchItem");
		item.innerHTML = this.itemHtml;
		applyHtmlMacros(item,null);
		refreshElements(item,null);
	},

	endRendering: function(pager) {
		// The currentTiddler must only be defined while rendering the found tiddlers
		currentTiddler = null;
	}
});

// Refreshes the content of the result with the current search result
// of the selected page.
//
// Assumes that the result is already open. 
//
var refreshResult = function() {
	if (!resultElement || !searchInputField) return;

	// Load the template for the YourSearchResult
	var html = store.getTiddlerText("YourSearchResultTemplate");
	if (!html) html = "<b>Tiddler YourSearchResultTemplate not found</b>";
	resultElement.innerHTML = html;

	// Expand the template macros etc.
	applyHtmlMacros(resultElement,null);
	refreshElements(resultElement,null);
	
	var itemRenderer = new MyItemRenderer(resultElement);
	pager.renderPage(itemRenderer);

	ensureResultIsDisplayedNicely();
};

pager.getItemsPerPage = function() {
	var n = (config.options.chkPreviewText) 
			? abego.toInt(config.options.txtItemsPerPageWithPreview, itemsPerPageWithPreviewDefault) 
			: abego.toInt(config.options.txtItemsPerPage, itemsPerPageDefault);
	return (n > 0) ? n : 1;
};

pager.onPageChanged = function() {
	refreshResult();
};

var	reopenResultIfApplicable = function() {
	if (searchInputField == null || !config.options.chkUseYourSearch) return;
	
	if ((searchInputField.value == lastSearchText) && lastSearchText && !isResultOpen()) {
		// For speedup we check re-use the previously created resultElement, if possible.
		if (resultElement && (resultElement.parentNode != document.body)) {
			document.body.appendChild(resultElement);
			ensureResultIsDisplayedNicely();
		} else {
			abego.YourSearch.onShowResult(true);
		}
	}
};


var invalidateResult = function() {
	closeResult();
	resultElement = null;
	lastSearchText = null;
};



//-------------------------------------------------------------------------
// Close the search result page when the user clicks on the document
// (and not into the searchInputField, on the search button or in the result)
// or presses the ESC key

// Returns true if e is either self or a descendant (child, grandchild,...) of self.
//
// @param self DOM:Element
// @param e DOM:Element or null
//
var isDescendantOrSelf = function(self, e) {
	while (e != null) {
		if (self == e) return true;
		e = e.parentNode;
	}
	return false;
};

var onDocumentClick = function(e) {
	if (e.target == searchInputField) return; 
	if (e.target == searchButton) return; 
	if (resultElement && isDescendantOrSelf(resultElement, e.target)) return; 
	
	closeResult();
};

var onDocumentKeyup = function(e) {
	// Close the search result page when the user presses "ESC"
	if (e.keyCode == 27) closeResult();
};
addEvent(document,"click",onDocumentClick);
addEvent(document,"keyup",onDocumentKeyup);


// Our Search Macro Hijack Function ==========================================

// Helper
var myStorySearch = function(text,useCaseSensitive,useRegExp)
{
	lastSearchText = text;
	setLastResults(findMatches(store, text,useCaseSensitive,useRegExp,"title","excludeSearch"));

	abego.YourSearch.onShowResult();
};


var myMacroSearchHandler = function(place,macroName,params,wikifier,paramString,tiddler)
{
	initStylesheet();

	lastSearchText = "";
	var searchTimeout = null;
	var doSearch = function(txt)
		{
		if (config.options.chkUseYourSearch)
			myStorySearch(txt.value,config.options.chkCaseSensitiveSearch,config.options.chkRegExpSearch);
		else
			story.search(txt.value,config.options.chkCaseSensitiveSearch,config.options.chkRegExpSearch);
		lastSearchText = txt.value;
		};
	var clickHandler = function(e)
		{
		doSearch(searchInputField);
		return false;
		};
	var keyHandler = function(e)
		{
		if (!e) var e = window.event;
		searchInputField = this;
		switch(e.keyCode)
			{
			case 13:
				if (e.ctrlKey && lastNewTiddlerButton && isResultOpen())
					lastNewTiddlerButton.onclick.apply(lastNewTiddlerButton,[e]);
				else
					doSearch(this);
				break;
			case 27:
				// When the result is open, close it, 
				// otherwise clear the content of the input field
				if (isResultOpen()) {
					closeResult();
				} else {
					this.value = "";
					clearMessage();
				}
				break;
			}
		if (String.fromCharCode(e.keyCode) == this.accessKey || e.altKey) 
			{
			reopenResultIfApplicable();
			}

		if(this.value.length<3 && searchTimeout) clearTimeout(searchTimeout);
		if(this.value.length > 2)
			{
		 	if (this.value != lastSearchText)
		 		{
				if (!config.options.chkUseYourSearch || config.options.chkSearchAsYouType)
					{
					if(searchTimeout)
						clearTimeout(searchTimeout);
					var txt = this;
					searchTimeout = setTimeout(function() {doSearch(txt);},500);
					}
				}
			else
				{
				if(searchTimeout)
					clearTimeout(searchTimeout);
				}
			};
		if (this.value.length == 0) 
			{
			closeResult();
			}
		};


	var focusHandler = function(e)
		{
		this.select();
		clearMessage();
		reopenResultIfApplicable();
		};

	
	var args = paramString.parseParams("list",null,true);
	var buttonAtRight = getFlag(args, "buttonAtRight");
	var sizeTextbox = getParam(args, "sizeTextbox", this.sizeTextbox);
	
	var btn;
	if (!buttonAtRight)
		btn = createTiddlyButton(place,this.label,this.prompt,clickHandler);
		
	var txt = createTiddlyElement(place,"input",null,null,null);
	if(params[0])
		txt.value = params[0];
	txt.onkeyup = keyHandler;
	txt.onfocus = focusHandler;
	txt.setAttribute("size",sizeTextbox);
	txt.setAttribute("accessKey",this.accessKey);
	txt.setAttribute("autocomplete","off");
	if(config.browser.isSafari)
		{
		txt.setAttribute("type","search");
		txt.setAttribute("results","5");
		}
	else
		txt.setAttribute("type","text");
	
	if(place)
		place.appendChild(txt);

	if (buttonAtRight)
		btn = createTiddlyButton(place,this.label,this.prompt,clickHandler);

	searchInputField = txt;
	searchButton = btn;
};

//----------------------------------------------------------------------------
// Support for Macros
//----------------------------------------------------------------------------

var openAllFoundTiddlers = function() {
	closeResult();
	var results = getLastResults();
	var n = results.length;
	if (n) {
		var titles=[];
		for(var i = 0; i<n; i++)
			titles.push(results[i].title);
		story.displayTiddlers(null,titles);
	}
};

var createOptionWithRefresh = function(place, optionParams, wikifier,tiddler) {
	invokeMacro(place,"option",optionParams,wikifier,tiddler);
	// The option macro appended the component at the end of the place.
	var elem = place.lastChild;
	var oldOnClick = elem.onclick;
	elem.onclick = function(e) {
		var result = oldOnClick.apply(this, arguments);
		refreshResult();
		return result;
	};
	return elem;
};

var removeTextDecoration = function(s) {
	var removeThis = ["''", "{{{", "}}}", "//", "<<<", "/***", "***/"];
	var reText = "";
	for (var i = 0; i < removeThis.length; i++) {
		if (i != 0) reText += "|";
		reText += "("+removeThis[i].escapeRegExp()+")";
	}
	return s.replace(new RegExp(reText, "mg"), "").trim();
};



// Returns the "shortcut number" of the currentTiddler. 
// I.e. When the user presses Alt-n the given tiddler is opened/display.
//
// @return 0-9 or -1 when no number is defined
//
var getShortCutNumber = function() {
	var i = indexInPage;
	return (i >= 0 && i <= 9) 
		? (i < 9 ? (i+1) : 0)
		: -1;
};

var limitedTextRenderer = new abego.LimitedTextRenderer();
var renderLimitedText = function(place, s, maxLen) {
	limitedTextRenderer.render(place,s,maxLen,lastQuery.getMarkRegExp())
}

// When any tiddler are changed reset the result.
// 
var oldTiddlyWikiSaveTiddler = TiddlyWiki.prototype.saveTiddler;
TiddlyWiki.prototype.saveTiddler = function(title,newTitle,newBody,modifier,modified,tags,fields) {
	oldTiddlyWikiSaveTiddler.apply(this, arguments);
	invalidateResult();
};
var oldTiddlyWikiRemoveTiddler = TiddlyWiki.prototype.removeTiddler;
TiddlyWiki.prototype.removeTiddler = function(title) {
	oldTiddlyWikiRemoveTiddler.apply(this, arguments);
	invalidateResult();
};

//----------------------------------------------------------------------------
// Macros
//----------------------------------------------------------------------------

// ====Macro yourSearch ================================================

config.macros.yourSearch = {
	// Standard Properties
	label: "yourSearch",
	prompt: "Gives access to the current/last YourSearch result",
	
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		if (params.length == 0) return;
	
		var name = params[0];
		var func = config.macros.yourSearch.funcs[name];
		if (func) func(place,macroName,params,wikifier,paramString,tiddler);
	},
	
	tests: {
		"true" : function() {return true;},
		"false" : function() {return false;},
		"found" : function() {return getLastResultsCount() > 0;},
		"previewText" : function() {return config.options.chkPreviewText;}
	},

	funcs: {
		itemRange: function(place) {
			if (getLastResultsCount()) {
				var lastIndex = pager.getLastIndexOnPage();
				var s = "%0 - %1".format([pager.getFirstIndexOnPage()+1,lastIndex+1]);
				createTiddlyText(place, s);
			}
		},
		
		count: function(place) {
			createTiddlyText(place, getLastResultsCount().toString());
		},
		
		query: function(place) {
			if (lastQuery) {
				createTiddlyText(place, lastQuery.toString());
			}
		},
		
		version: function(place) {
			var t = "YourSearch %0.%1.%2".format(
					[version.extensions.YourSearchPlugin.major, 
					 version.extensions.YourSearchPlugin.minor, 
					 version.extensions.YourSearchPlugin.revision]);
			var e = createTiddlyElement(place, "a");
			e.setAttribute("href", "http://tiddlywiki.abego-software.de/#YourSearchPlugin");
			e.innerHTML = '<font color="black" face="Arial, Helvetica, sans-serif">'+t+'<font>';
		},
		
		copyright: function(place) {
			var e = createTiddlyElement(place, "a");
			e.setAttribute("href", "http://www.abego-software.de");
			e.innerHTML = '<font color="white" face="Arial, Helvetica, sans-serif">&copy; 2005-2008 <b><font color="white">abego</font></b> Software<font>';
		},
		
		newTiddlerButton: function(place) {
			if (lastQuery) {
				var r = abego.parseNewTiddlerCommandLine(lastQuery.getQueryText());
				var btn = config.macros.newTiddler.createNewTiddlerButton(place,r.title,r.params,"new tiddler","Create a new tiddler based on search text. (Shortcut: Ctrl-Enter; Separators: '.', '#')",null,"text");				
				// Close the result before the new tiddler is created.
				var oldOnClick = btn.onclick;
				btn.onclick = function() {
					closeResult();
					oldOnClick.apply(this,arguments);
				}
				lastNewTiddlerButton = btn;
			}
		},
		
		linkButton: function(place,macroName,params,wikifier,paramString,tiddler) {
			if (params < 2) return;
			
			var	tiddlyLink = params[1];
			var text = params < 3 ? tiddlyLink : params[2];
			var tooltip = params < 4 ? text : params[3];
			var accessKey = params < 5 ? null : params[4];
			
			var btn = createTiddlyButton(place,text,tooltip,closeResultAndDisplayTiddler,null,null, accessKey);
			btn.setAttribute("tiddlyLink",tiddlyLink);
		},
		
		closeButton: function(place,macroName,params,wikifier,paramString,tiddler) {
			var button = createTiddlyButton(place, "close", "Close the Search Results (Shortcut: ESC)", closeResult);
		},
		
		openAllButton: function(place,macroName,params,wikifier,paramString,tiddler) {
			var n = getLastResultsCount();
			if (n == 0) return;
		
			var title = n == 1 ? "open tiddler" : "open all %0 tiddlers".format([n]);
			var button = createTiddlyButton(place, title, "Open all found tiddlers (Shortcut: Alt-O)", openAllFoundTiddlers);
			button.setAttribute("accessKey","O");
		},
		
		naviBar: function(place,macroName,params,wikifier,paramString,tiddler) {
			pager.addPageNavigation(place);
		},
		
		"if": function(place,macroName,params,wikifier,paramString,tiddler) {
			if (params.length < 2) return;
			
			var testName = params[1];
			var negate = (testName == "not");
			if (negate) {
				if (params.length < 3) return;
				testName = params[2];
			}
			
			var test = config.macros.yourSearch.tests[testName];
			var showIt = false;
			try {
				if (test) {
					showIt = test(place,macroName,params,wikifier,paramString,tiddler) != negate;
				} else {
					// When no predefined test is specified try to evaluate it as a JavaScript expression.
					showIt = (!eval(testName)) == negate;
				}
			} catch (ex) {
			}
			
			if (!showIt) {
				place.style.display="none";
			}
		},
		
		chkPreviewText: function(place,macroName,params,wikifier,paramString,tiddler) {
			var optionParams = params.slice(1).join(" ");
			
			var elem = createOptionWithRefresh(place, "chkPreviewText", wikifier,tiddler);
			elem.setAttribute("accessKey", "P");
			elem.title = "Show text preview of found tiddlers (Shortcut: Alt-P)";	
			return elem;
		}
	}
};


// ====Macro foundTiddler ================================================

config.macros.foundTiddler = {
	// Standard Properties
	label: "foundTiddler",
	prompt: "Provides information on the tiddler currently processed on the YourSearch result page",
	
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var name = params[0];
		var func = config.macros.foundTiddler.funcs[name];
		if (func) func(place,macroName,params,wikifier,paramString,tiddler);
	},
		
	funcs: {
		title: function(place,macroName,params,wikifier,paramString,tiddler) {
			if (!currentTiddler) return;
			
			var shortcutNumber = getShortCutNumber();
			var tooltip = shortcutNumber >= 0 
					? "Open tiddler (Shortcut: Alt-%0)".format([shortcutNumber.toString()])
					: "Open tiddler";
		
			var btn = createTiddlyButton(place,null,tooltip,closeResultAndDisplayTiddler,null);
			btn.setAttribute("tiddlyLink",currentTiddler.title);
			btn.setAttribute("withHilite","true");
			
			renderLimitedText(btn, currentTiddler.title, maxCharsInTitle);
		
			if (shortcutNumber >= 0) {
				btn.setAttribute("accessKey",shortcutNumber.toString());
			}
		},
		
		tags: function(place,macroName,params,wikifier,paramString,tiddler) {
			if (!currentTiddler) return;
		
			renderLimitedText(place, currentTiddler.getTags(), maxCharsInTags);
		},
		
		text: function(place,macroName,params,wikifier,paramString,tiddler) {
			if (!currentTiddler) return;
		
			renderLimitedText(place, removeTextDecoration(currentTiddler.text), maxCharsInText);
		},
		
		field:  function(place,macroName,params,wikifier,paramString,tiddler) {
			if (!currentTiddler) return;
			var	name = params[1];
			var len = params.length > 2 ? abego.toInt(params[2],maxCharsInField) : maxCharsInField;
			var v = store.getValue(currentTiddler,name);
			if (v)
				renderLimitedText(place, removeTextDecoration(v), len);
		},
		
		// Renders the "shortcut number" of the current tiddler, to indicate to the user
		// what number to "Alt-press" to open the tiddler.
		//
		number: function(place,macroName,params,wikifier,paramString,tiddler) {
			var numberToDisplay = getShortCutNumber();
			if (numberToDisplay >= 0) {
				var text = "%0)".format([numberToDisplay.toString()]);
				createTiddlyElement(place,"span",null,"shortcutNumber",text);
			}
		}
	}
};


//----------------------------------------------------------------------------
// Configuration Stuff
//----------------------------------------------------------------------------

var opts = {chkUseYourSearch:true,
	chkPreviewText:true,
	chkSearchAsYouType:true,
	chkSearchInTitle:true,
	chkSearchInText:true,
	chkSearchInTags:true,
	chkSearchExtendedFields:true,
	txtItemsPerPage:itemsPerPageDefault,
	txtItemsPerPageWithPreview:itemsPerPageWithPreviewDefault};
for (var n in opts) 
	if (config.options[n] == undefined) config.options[n] = opts[n];




//----------------------------------------------------------------------------
// Shadow Tiddlers
//----------------------------------------------------------------------------

config.shadowTiddlers.AdvancedOptions += "\n<<option chkUseYourSearch>> Use 'Your Search' //([[more options|YourSearch Options]]) ([[help|YourSearch Help]])// ";

config.shadowTiddlers["YourSearch Help"] =
"!Field Search\nWith the Field Search you can restrict your search to certain fields of a tiddler, e.g"+
" only search the tags or only the titles. The general form is //fieldname//'':''//textToSearch// (e."+
"g. {{{title:intro}}}). In addition one-character shortcuts are also supported for the standard field"+
"s {{{title}}}, {{{text}}} and {{{tags}}}:\n|!What you want|!What you type|!Example|\n|Search ''titles "+
"only''|start word with ''!''|{{{!jonny}}} (shortcut for {{{title:jonny}}})|\n|Search ''contents/text "+
"only''|start word with ''%''|{{{%football}}} (shortcut for {{{text:football}}})|\n|Search ''tags only"+
"''|start word with ''#''|{{{#Plugin}}} (shortcut for {{{tags:Plugin}}})|\n\nUsing this feature you may"+
" also search the extended fields (\"Metadata\") introduced with TiddlyWiki 2.1, e.g. use {{{priority:1"+
"}}} to find all tiddlers with the priority field set to \"1\".\n\nYou may search a word in more than one"+
" field. E.g. {{{!#Plugin}}} (or {{{title:tags:Plugin}}} in the \"long form\") finds tiddlers containin"+
"g \"Plugin\" either in the title or in the tags (but does not look for \"Plugin\" in the text). \n\n!Boole"+
"an Search\nThe Boolean Search is useful when searching for multiple words.\n|!What you want|!What you "+
"type|!Example|\n|''All words'' must exist|List of words|{{{jonny jeremy}}} (or {{{jonny and jeremy}}}"+
")|\n|''At least one word'' must exist|Separate words by ''or''|{{{jonny or jeremy}}}|\n|A word ''must "+
"not exist''|Start word with ''-''|{{{-jonny}}} (or {{{not jonny}}})|\n\n''Note:'' When you specify two"+
" words, separated with a space, YourSearch finds all tiddlers that contain both words, but not neces"+
"sarily next to each other. If you want to find a sequence of word, e.g. '{{{John Brown}}}', you need"+
" to put the words into quotes. I.e. you type: {{{\"john brown\"}}}.\n\nUsing parenthesis you may change "+
"the default \"left to right\" evaluation of the boolean search. E.g. {{{not (jonny or jeremy)}}} finds"+
" all tiddlers that contain neither \"jonny\" nor \"jeremy. In contrast to this {{{not jonny or jeremy}}"+
"} (i.e. without parenthesis) finds all tiddlers that either don't contain \"jonny\" or that contain \"j"+
"eremy\".\n\n!'Exact Word' Search\nBy default a search result all matches that 'contain' the searched tex"+
"t. E.g. if you search for {{{Task}}} you will get all tiddlers containing 'Task', but also '~Complet"+
"edTask', '~TaskForce' etc.\n\nIf you only want to get the tiddlers that contain 'exactly the word' you"+
" need to prefix it with a '='. E.g. typing '=Task' will find the tiddlers that contain the word 'Tas"+
"k', ignoring words that just contain 'Task' as a substring.\n\n!~CaseSensitiveSearch and ~RegExpSearch"+
"\nThe standard search options ~CaseSensitiveSearch and ~RegExpSearch are fully supported by YourSearc"+
"h. However when ''~RegExpSearch'' is on Filtered and Boolean Search are disabled.\n\nIn addition you m"+
"ay do a \"regular expression\" search even with the ''~RegExpSearch'' set to false by directly enterin"+
"g the regular expression into the search field, framed with {{{/.../}}}. \n\nExample: {{{/m[ae][iy]er/"+
"}}} will find all tiddlers that contain either \"maier\", \"mayer\", \"meier\" or \"meyer\".\n\n!~JavaScript E"+
"xpression Filtering\nIf you are familiar with JavaScript programming and know some TiddlyWiki interna"+
"ls you may also use JavaScript expression for the search. Just enter a JavaScript boolean expression"+
" into the search field, framed with {{{ { ... } }}}. In the code refer to the variable tiddler and e"+
"valuate to {{{true}}} when the given tiddler should be included in the result. \n\nExample: {{{ { tidd"+
"ler.modified > new Date(\"Jul 4, 2005\")} }}} returns all tiddler modified after July 4th, 2005.\n\n!Com"+
"bined Search\nYou are free to combine the various search options. \n\n''Examples''\n|!What you type|!Res"+
"ult|\n|{{{!jonny !jeremy -%football}}}|all tiddlers with both {{{jonny}}} and {{{jeremy}}} in its tit"+
"les, but no {{{football}}} in content.|\n|{{{#=Task}}}|All tiddlers tagged with 'Task' (the exact wor"+
"d). Tags named '~CompletedTask', '~TaskForce' etc. are not considered.|\n\n!Access Keys\nYou are encour"+
"aged to use the access keys (also called \"shortcut\" keys) for the most frequently used operations. F"+
"or quick reference these shortcuts are also mentioned in the tooltip for the various buttons etc.\n\n|"+
"!Key|!Operation|\n|{{{Alt-F}}}|''The most important keystroke'': It moves the cursor to the search in"+
"put field so you can directly start typing your query. Pressing {{{Alt-F}}} will also display the pr"+
"evious search result. This way you can quickly display multiple tiddlers using \"Press {{{Alt-F}}}. S"+
"elect tiddler.\" sequences.|\n|{{{ESC}}}|Closes the [[YourSearch Result]]. When the [[YourSearch Resul"+
"t]] is already closed and the cursor is in the search input field the field's content is cleared so "+
"you start a new query.|\n|{{{Alt-1}}}, {{{Alt-2}}},... |Pressing these keys opens the first, second e"+
"tc. tiddler from the result list.|\n|{{{Alt-O}}}|Opens all found tiddlers.|\n|{{{Alt-P}}}|Toggles the "+
"'Preview Text' mode.|\n|{{{Alt-'<'}}}, {{{Alt-'>'}}}|Displays the previous or next page in the [[Your"+
"Search Result]].|\n|{{{Return}}}|When you have turned off the 'as you type' search mode pressing the "+
"{{{Return}}} key actually starts the search (as does pressing the 'search' button).|\n\n//If some of t"+
"hese shortcuts don't work for you check your browser if you have other extensions installed that alr"+
"eady \"use\" these shortcuts.//";

config.shadowTiddlers["YourSearch Options"] =
"|>|!YourSearch Options|\n|>|<<option chkUseYourSearch>> Use 'Your Search'|\n|!|<<option chkPreviewText"+
">> Show Text Preview|\n|!|<<option chkSearchAsYouType>> 'Search As You Type' Mode (No RETURN required"+
" to start search)|\n|!|Default Search Filter:<<option chkSearchInTitle>>Title ('!')     <<option chk"+
"SearchInText>>Text ('%')     <<option chkSearchInTags>>Tags ('#')    <<option chkSearchExtendedFiel"+
"ds>>Extended Fields<html><br><font size=\"-2\">The fields of a tiddlers that are searched when you don"+
"'t explicitly specify a filter in the search text <br>(Explictly specify fields using one or more '!"+
"', '%', '#' or 'fieldname:' prefix before the word/text to find).</font></html>|\n|!|Number of items "+
"on search result page: <<option txtItemsPerPage>>|\n|!|Number of items on search result page with pre"+
"view text: <<option txtItemsPerPageWithPreview>>|\n";
			
config.shadowTiddlers["YourSearchStyleSheet"] = 
"/***\n!~YourSearchResult Stylesheet\n***/\n/*{{{*/\n.yourSearchResult {\n\tposition: absolute;\n\twidth: 800"+
"px;\n\n\tpadding: 0.2em;\n\tlist-style: none;\n\tmargin: 0;\n\n\tbackground: #ffd;\n\tborder: 1px solid DarkGra"+
"y;\n}\n\n/*}}}*/\n/***\n!!Summary Section\n***/\n/*{{{*/\n.yourSearchResult .summary {\n\tborder-bottom-width:"+
" thin;\n\tborder-bottom-style: solid;\n\tborder-bottom-color: #999999;\n\tpadding-bottom: 4px;\n}\n\n.yourSea"+
"rchRange, .yourSearchCount, .yourSearchQuery   {\n\tfont-weight: bold;\n}\n\n.yourSearchResult .summary ."+
"button {\n\tfont-size: 10px;\n\n\tpadding-left: 0.3em;\n\tpadding-right: 0.3em;\n}\n\n.yourSearchResult .summa"+
"ry .chkBoxLabel {\n\tfont-size: 10px;\n\n\tpadding-right: 0.3em;\n}\n\n/*}}}*/\n/***\n!!Items Area\n***/\n/*{{{*"+
"/\n.yourSearchResult .marked {\n\tbackground: none;\n\tfont-weight: bold;\n}\n\n.yourSearchItem {\n\tmargin-to"+
"p: 2px;\n}\n\n.yourSearchNumber {\n\tcolor: #808080;\n}\n\n\n.yourSearchTags {\n\tcolor: #008000;\n}\n\n.yourSearc"+
"hText {\n\tcolor: #808080;\n\tmargin-bottom: 6px;\n}\n\n/*}}}*/\n/***\n!!Footer\n***/\n/*{{{*/\n.yourSearchFoote"+
"r {\n\tmargin-top: 8px;\n\tborder-top-width: thin;\n\tborder-top-style: solid;\n\tborder-top-color: #999999;"+
"\n}\n\n.yourSearchFooter a:hover{\n\tbackground: none;\n\tcolor: none;\n}\n/*}}}*/\n/***\n!!Navigation Bar\n***/"+
"\n/*{{{*/\n.yourSearchNaviBar a {\n\tfont-size: 16px;\n\tmargin-left: 4px;\n\tmargin-right: 4px;\n\tcolor: bla"+
"ck;\n\ttext-decoration: underline;\n}\n\n.yourSearchNaviBar a:hover {\n\tbackground-color: none;\n}\n\n.yourSe"+
"archNaviBar .prev {\n\tfont-weight: bold;\n\tcolor: blue;\n}\n\n.yourSearchNaviBar .currentPage {\n\tcolor: #"+
"FF0000;\n\tfont-weight: bold;\n\ttext-decoration: none;\n}\n\n.yourSearchNaviBar .next {\n\tfont-weight: bold"+
";\n\tcolor: blue;\n}\n/*}}}*/\n";

config.shadowTiddlers["YourSearchResultTemplate"] =
"<!--\n{{{\n-->\n<span macro=\"yourSearch if found\">\n<!-- The Summary Header ============================"+
"================ -->\n<table class=\"summary\" border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">"+
"<tbody>\n  <tr>\n\t<td align=\"left\">\n\t\tYourSearch Result <span class=\"yourSearchRange\" macro=\"yourSearc"+
"h itemRange\"></span>\n\t\t&nbsp;of&nbsp;<span class=\"yourSearchCount\" macro=\"yourSearch count\"></span>\n"+
"\t\tfor&nbsp;<span class=\"yourSearchQuery\" macro=\"yourSearch query\"></span>\n\t</td>\n\t<td class=\"yourSea"+
"rchButtons\" align=\"right\">\n\t\t<span macro=\"yourSearch chkPreviewText\"></span><span class=\"chkBoxLabel"+
"\">preview text</span>\n\t\t<span macro=\"yourSearch newTiddlerButton\"></span>\n\t\t<span macro=\"yourSearch openAllButton\"></span>\n\t\t<span macro=\"yourSearch lin"+
"kButton 'YourSearch Options' options 'Configure YourSearch'\"></span>\n\t\t<span macro=\"yourSearch linkB"+
"utton 'YourSearch Help' help 'Get help how to use YourSearch'\"></span>\n\t\t<span macro=\"yourSearch clo"+
"seButton\"></span>\n\t</td>\n  </tr>\n</tbody></table>\n\n<!-- The List of Found Tiddlers ================="+
"=========================== -->\n<div id=\"yourSearchResultItems\" itemsPerPage=\"25\" itemsPerPageWithPr"+
"eview=\"10\"></div>\n\n<!-- The Footer (with the Navigation) ==========================================="+
"= -->\n<table class=\"yourSearchFooter\" border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\"><tbody"+
">\n  <tr>\n\t<td align=\"left\">\n\t\tResult page: <span class=\"yourSearchNaviBar\" macro=\"yourSearch naviBar"+
"\"></span>\n\t</td>\n\t<td align=\"right\"><span macro=\"yourSearch version\"></span>, <span macro=\"yourSearc"+
"h copyright\"></span>\n\t</td>\n  </tr>\n</tbody></table>\n<!-- end of the 'tiddlers found' case ========="+
"================================== -->\n</span>\n\n\n<!-- The \"No tiddlers found\" case ================="+
"========================== -->\n<span macro=\"yourSearch if not found\">\n<table class=\"summary\" border="+
"\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\"><tbody>\n  <tr>\n\t<td align=\"left\">\n\t\tYourSearch Resu"+
"lt: No tiddlers found for <span class=\"yourSearchQuery\" macro=\"yourSearch query\"></span>.\n\t</td>\n\t<t"+
"d class=\"yourSearchButtons\" align=\"right\">\n\t\t<span macro=\"yourSearch newTiddlerButton\"></span>\n\t\t<span macro=\"yourSearch linkButton 'YourSearch Options'"+
" options 'Configure YourSearch'\"></span>\n\t\t<span macro=\"yourSearch linkButton 'YourSearch Help' help"+
" 'Get help how to use YourSearch'\"></span>\n\t\t<span macro=\"yourSearch closeButton\"></span>\n\t</td>\n  <"+
"/tr>\n</tbody></table>\n</span>\n\n\n<!--\n}}}\n-->\n";

config.shadowTiddlers["YourSearchItemTemplate"] = 
"<!--\n{{{\n-->\n<span class='yourSearchNumber' macro='foundTiddler number'></span>\n<span class='yourSea"+
"rchTitle' macro='foundTiddler title'/></span>&nbsp;-&nbsp;\n<span class='yourSearchTags' macro='found"+
"Tiddler field tags 50'/></span>\n<span macro=\"yourSearch if previewText\"><div class='yourSearchText' macro='fo"+
"undTiddler field text 250'/></div></span>\n<!--\n}}}\n-->";

config.shadowTiddlers["YourSearch"] = "<<tiddler [[YourSearch Help]]>>";

config.shadowTiddlers["YourSearch Result"] = "The popup-like window displaying the result of a YourSearch query.";

//----------------------------------------------------------------------------
// Install YourSearch
//----------------------------------------------------------------------------

// Overwrite the TiddlyWiki search handler and verify after a while 
// that nobody else has overwritten it.
config.macros.search.handler = myMacroSearchHandler;

var checkForOtherHijacker = function() {
	// Check that still our search handler is installed
    if (config.macros.search.handler != myMacroSearchHandler) {
    	alert(
"Message from YourSearchPlugin:\n\n\nAnother plugin has disabled the 'Your Search' features.\n\n\nYou may "+
"disable the other plugin or change the load order of \nthe plugins (by changing the names of the tidd"+
"lers)\nto enable the 'Your Search' features.");
    }
};

setTimeout(checkForOtherHijacker, 5000);

// === Public API =================================

abego.YourSearch.getStandardRankFunction = function() {
	return standardRankFunction;
};

abego.YourSearch.getRankFunction = function() {
	return abego.YourSearch.getStandardRankFunction();
};

abego.YourSearch.getCurrentTiddler = function() {
	return currentTiddler;
};

abego.YourSearch.closeResult = function() {
	closeResult();
};

// Returns an array of tiddlers that matched the last search
abego.YourSearch.getFoundTiddlers = function() {
	return lastResults;
};

// The last Search query (TiddlerQuery), or null
abego.YourSearch.getQuery = function() {
	return lastQuery;
};

abego.YourSearch.onShowResult = function(useOldResult) {
	highlightHack = lastQuery ? lastQuery.getMarkRegExp() : null;
	if (!useOldResult)
		pager.setItems(getLastResults());
	if (!resultElement) {
		resultElement = createTiddlyElement(document.body,"div",yourSearchResultID,"yourSearchResult");
	} else if (resultElement.parentNode != document.body) {
		document.body.appendChild(resultElement);
	}
	refreshResult();
	highlightHack = null;
};

})();
} // of "install only once"
// Used Globals (for JSLint) ==============

// ... JavaScript Core
/*global 	alert,clearTimeout,confirm */
// ... TiddlyWiki Core
/*global 	Tiddler, applyHtmlMacros, clearMessage, createTiddlyElement, createTiddlyButton, createTiddlyText, ensureVisible ,findPosX, highlightHack, findPosY,findWindowWidth, invokeMacro, saveChanges, refreshElements, story */
//}}}
/***
!Licence and Copyright
Copyright (c) abego Software ~GmbH, 2005-2008 ([[www.abego-software.de|http://www.abego-software.de]])

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 abego Software nor the names of its contributors may be
used to endorse or promote products derived from this software without specific
prior written permission.

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.
***/
/***
!~YourSearchResult Stylesheet
***/
/*{{{*/
.yourSearchResult {
	position: absolute;
	width: 800px;
	padding: 0.2em;
	list-style: none;
	margin: 0;
	background: url(http://dl.getdropbox.com/u/55061/TW/img/background2.jpg);
	border: 1px solid white;
	-moz-border-radius: 6px;
	-webkit-border-radius: 6px;
	color: white;
	font-family: "Lucida Grande" Verdana;	
	}

.yourSearchResult .button, .yourSearchResult .shortcutNumber {color: white;
			border: 1px solid transparent;
			background: transparent;
			}

.yourSearchResult .shortcutNumber {display: none;}

/*}}}*/
/***
!!Summary Section
***/
/*{{{*/
.yourSearchResult .summary {
	border-bottom-width: thin;
	border-bottom-style: solid;
	border-bottom-color: #999999;
	padding-bottom: 4px;
	color: white;
	font-size: .9em;}

.yourSearchRange, .yourSearchCount, .yourSearchQuery   {
	font-weight: bold;
}

.yourSearchResult .summary .button {
	font-size: 10px;
	color: white;
	padding-left: 0.3em;
	padding-right: 0.3em;
	}

.yourSearchResult .summary .chkBoxLabel {
	font-size: 10px;
	padding-right: 0.3em;
}

/*}}}*/
/***
!!Items Area
***/
/*{{{*/
.yourSearchResult .marked {
	background: none;
	color: #f7c898;
	border: none;}

.yourSearchItem {
	margin-top: 2px;
	margin-bottom: 3px;
	background: url(img/trans10.png);
	font-weight: bold; /* LLST */
	-moz-border-radius: 4px;
	-webkit-border-radius: 4px;
	border: 1px solid transparent;
	font-size: .95em;
	}

.yourSearchItem .button {border-bottom: 1px dotted #F7C898;
			}

.yourSearchNumber {
	color: #000;
	font-weight: bold;
}

.yourSearchTags {
	color: white;
	font-weight: normal;
	}

.yourSearchText .marked{   	/* LLST */
	color: #F7C898;
	border: none;
}

.yourSearchText {
	color: white;
	margin-top: .5em;
	margin-bottom: 5px;
	font-weight: normal;
	font-size: .9em;
	margin-left: 1.2em;
	}

/*}}}*/
/***
!!Footer
***/
/*{{{*/
.yourSearchFooter {
	margin-top: 8px;
	border-top-width: thin;
	border-top-style: solid;
	border-top-color: #999999;
	}

.yourSearchFooter a {background: url(img/trans25.png);}

.yourSearchFooter a:hover{
	background: url(img/trans50.png);
	color: white;
	}
/*}}}*/
/***
!!Navigation Bar
***/
/*{{{*/
.yourSearchNaviBar a {
	font-size: 14px;
	margin-left: 4px;
	margin-right: 4px;
	color: black;
	text-decoration: underline;
}

.yourSearchNaviBar a:hover {
	background-color: none;
}

.yourSearchNaviBar .prev {
	font-weight: bold;
	/*color: blue;*/
}

.yourSearchNaviBar .currentPage {
	color: white;
	font-weight: bold;
	text-decoration: none;
}

.yourSearchNaviBar .next {
	font-weight: bold;
	/*color: blue;*/
}
/*}}}*/
!usage
{{{[img[all.png]]}}}
[img[all.png]]
!notes
//none//
!type
image/png
!file

!url

!data
data:image/png;base64,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
!usage
{{{[img[background.jpg]]}}}
[img[background.jpg]]
!notes
//none//
!type
image/jpeg
!file

!url

!data
data:image/jpeg;base64,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
!usage
{{{[img[background2.jpg]]}}}
[img[background2.jpg]]
!notes
//none//
!type
image/jpeg
!file

!url

!data
data:image/jpeg;base64,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
!usage
{{{[img[clock.png]]}}}
[img[clock.png]]
!notes
//none//
!type
image/png
!file

!url

!data
data:image/png;base64,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
!usage
{{{[img[close.png]]}}}
[img[close.png]]
!notes
//none//
!type
image/png
!file

!url

!data
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKXSURBVHjapJNPSxtRFMXPmz9JZpxErdbGWEEUodRSwZ0UhLpLV7ZQ+hkKgqgQiptupNBF2oWiNisLLgolBYui1H6C4tq2CEKsWrWJTGoySWYy83rfIxB3pTQweTN35vzevefexzjn+J+fJv6We3vvV0zziWZZlsAxxuRLuTbuGwEZ8x2naufzmecnJ18kgCUSzx6mUn1+EEBVFKiqCk3TwH1f3odME4zijGJiDVsWPu3sXCPpIwmIMdZ3vLsLRgAR4J6HCInupFJQdB376bSEGYYBFgpBC4dhbG8PYXYWigAElQpweQl+cYGAxG1jY9AJQKnCp7jR34/2iQkEYoN8Hrr4vlhsesBdFwGJWSSCW5OTaCdB7uhIxjllYBK0c3gYle5u2JkM1L098MNDCZAZoF6Hd3qKm8mkFJ+srsLe2oIWjUKLxVDe2IC9tASjqwux8XG42fck5M0MGO2AWg03RkdRt22cra1Bo93tbBYamaiWy3A3N+HTBsbQbTidbVC84AqAMlAIoJO7XqEA/+xMOn+xvIwQOR9WVPj73+F9+4pI8gG0+HWwn7+aAEWUQDVX6TIHBqTLoJJEz3mpBJ+gMMNQ7w6DF/KUrUPd0ZoeKFSCe36OI6pTpVYl5ubgktteLkcCyoh635J+Bb2nB9XsO3CnRDOhXsmA2qPQSB+vrKB1cBCJ6WlER0Zwub4u4S2y9iHUPn5AeSFNxkahlOpNgNqYVJUgBzMzqB8cIE7t7JqakvGASiu9fAEnswDFoPLIWMb8KyZalmeVHZ15LkL0XFhcRJWulngcITHC5d9gPr2Ld8rJNMM6ag0AE6fxXjT6+GlHx/y/nMK3xeLrz7b9RgIapy+hA61iMP+iZTQ1JVp/iIc/AgwAj4IQNVXCEL0AAAAASUVORK5CYII=
!usage
{{{[img[closeall.png]]}}}
[img[closeall.png]]
!notes
//none//
!type
image/png
!file

!url

!data
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAKXSURBVDiNlZJLaJRnFIaf75uZ6EwSm9tIQpNIvNWoFCsmiwrSgotKS3aCl4WL0Y2CIvwLBV0YFwYckFIQhI7GhWBLdaEL6Y0WMS20aTQxijGNmnFGSZPJZcw/80/+//uOK0VjIfisz/twzstRR75gczjEBRGixrL31A35kfdAhzTfr22OrdqworwxpLl6dJva+l4CYHFFVLO0KsLHLbFYSHP29H6lU0nVmUqq2gUFVugcfFJ0fSPU15QRXazqqxrpBY4DSxcUiPCN65mLtwbz7kzJp6mdypWtGzfE400vgLqFBEpEAOjap07EV3L8k7bPVXNLOz2nu73pf8Zy7FSTxsglEc4nHBn/X0EqqXZprb79dHNHtK6ugX+//punVx+y/ux2atdVkR7t9+7f/UOM9b4zRo4lHMnOF+zRmmRTfWs5lyRqJl22dG9lUY0GFYVQNX5Qzr3BX/2B/t8N4v9gDCng5usTUkm1KHKOOxXNtas6Lh8Oaf0cQg1gxsBksUEez7bgzdWQyQzI45EBd2oyW9SvVkk4UvJ301V7sLGkI2VgZyEYAZMF8x9e4RmzuevMjJ0jXo3a1P5VhVZKwm81UsHP2UxaW6tQ/ggiPv6ch1eapViYoVCYRkTQ4UrST3oDlPym38wnHHnmz02PpNN3mXFjTEyMksulmcxlcN0pRIRY9TYKRc3Qg/6SMThvCQACI4f6en8p+qzGdT2KxTzWBuhwDZXxHeTdmNy6eSVvTPBlwpHM6xLfpPuM6ln9UXvb8hWtES//J2WxNejIMh4N9wRDQ33j1vJZwpGHAOF30oAxdAw9+Ot25ZKGDz+oatOjo/f84eGfAmu869ZyIOHIxDufOJ9UUi1Tij6lEOCatZxMOPJ4/txLfgdDCCiEEtoAAAAASUVORK5CYII=
!usage
{{{[img[closebn.png]]}}}
[img[closebn.png]]
!notes
//none//
!type
image/png
!file

!url

!data
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIYSURBVHjapFM569pBEB3PeKf4g2CwESFaiWDARkWwCFgEGy2sRCwEP5FBO0FbkYB4dMHCAwXFRpBU2ileeGv2DfxETZmF2WN25s3M2x3Z/X6n/xlKTH6//6tYvn0SA4AymYwvsUp7SS+Xy+l4PJ7X6/XvXq/3hwH0ev33dDr9cb1eSaFQsKhUKsJZqVSSVqtlR+yxGgwGqlQqOuH6kwHUavXHYDDgKDC4XC6k0+kok8kwUDabZTAA4SwSpdFo9AW+ckzn85n2+z1tt1t29ng8pNFoWLfb7chqtVIoFOIAm82G7UUZ9AC43W5siDWRSFAkEiGTycSGAISj2+2maDSKbGk2m7H9C8BqtQKZZLfbqVQqUbfb5VqNRiO1220qFApkNpvJ6/XSZDJ5kKuUABANlwBqNpusq1arTCjuwFEgECCHw8EcgKsHAFKEiNegxWLB6cGoVqsx85DlcknT6ZSCwSAT/AKAdEAgarPZbOxwOBw4ukQWbBAdQNJzPzhA9NPpRMVikZ8qFouxIwTGuA+Hw2SxWKherzOxLxxIP67T6VAul6NUKkUul4sajQZz4fP5yOl08hn8/MOBhAZluVym+XxO8Xickskk63HO5/PUarW4vOcvzgBCeRWikED6/T4Nh0P+TKhVajj8AfxE6FHaA0A0xS+R8g+gPjfTc6e+N9V4PG7KMJ4cPgvRSiDv402Pp1li81eAAQBRMh57P21q2AAAAABJRU5ErkJggg==
!usage
{{{[img[favicon.gif]]}}}
[img[favicon.gif]]
!notes
//none//
!type
image/gif
!file

!url

!data
data:image/gif;base64,R0lGODlhEAAQAMQAAOgzPfzs7fjGyOs9RuoYJPWnq+tbYucKFughLO9zevjY2vQLGPoLGPayte5sc/jS1Pe7vu+Mkv76+vjN0PB7gfe2uvGFi+8KF/////GBh+yQlv79/fnf4PCIjvrm5/3z8yH5BAAAAAAALAAAAAAQABAAAAWk4EQwS2kyaEpQzOEe5XUAhlZpC1seiBFVHIxQ2LAMKA3PcLncCDkNxwARwEgKVUxBYBgAGBZRAQNhaDCTgyL5OYwTA4yhi0kYloP4A6EABAATABBLBQdVeQkYFHlOQx4XYzgKGBwLERgPjRg0VkFCWRpKQh0EmhgeAhoGDh1LAQETBVIEFwsMLB0CBRQGCDALMi4MDyMpKCYnCJQaGc3OzxkaHCEAOw==
!usage
{{{[img[house.png]]}}}
[img[house.png]]
!notes
//none//
!type
image/png
!file

!url

!data
data:image/png;base64,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
!usage
{{{[img[journal.png]]}}}
[img[journal.png]]
!notes
//none//
!type
image/png
!file

!url

!data
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAgZJREFUeNqMU01PE1EUPW/mSTtYCNSJiYDU4MaU1DROCAbTpDWRlYaVOxPZuUVWSmITumDjwr/AjoVsdFkXZecCmxbQGtPEjygkaMFCsMB0Zp73zUCZmiK9yZn3ce45c98XvjOGH4RFAsUo4aFs5Xj9CK04qZFa5n6ADBHRV0JcSZVKRi4azU8w9hW+aMGVBJDmpsfHhzKZe8lsFuVyGclEwuhPpQy/QTKXO+HGx43P6XSHnOcHHh9w9vZQ2d3Fx8lJ9AwOwqpW/fomTuaSLuAa1ISQrWbXahhbWMDw8jLOBQLYGhhA1/x8w+B6LIarkQjOd3dD5pJOa66AJjempqB1dqJOE/s0Dup6w0BuYygUAhwHMve4AlzzMC0onDYhQ2qklgvvB6pNS3HIvZ1QFAWkU+E3sEhs23ZbBlLZMIDPoG5Z/xU+XptBsboGIxw/9mlUwOtkcHiGQeHXCkZujeDd27ysgG9PaM1LME8xeFp8htXqe7e/Y+9AmA6+PO95ZPUqfYrw1sMt2kST9qAVVjZXoY/pLipWBeGbYSQe3L6EQ8fg+/QWgnSmKucIalrLCm5ciKOYLbh9J6VAXQI+fCpsIqzk+YYQfRHGupZ8t+7fuIuYiyfbL3Bgqwiu2+if+/P6mxCz8oIZFxm7T9fq8lnHt3WHj5o6ejsq+B16Yy3+FOLlXwEGADgPG1QPI2tLAAAAAElFTkSuQmCC
!usage
{{{[img[ministar.png]]}}}
[img[ministar.png]]
!notes
//none//
!type
image/png
!file

!url

!data
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADdSURBVDjLY/j//z8DJZhhmBvw41KQ07dzbk5kG/Dtgu/Jb2fsT5JkwI+bqZw/rsfYA21v+XE97f+PS5H/vx5Ra/98QN7+824ZTiIMSJr580bW/x+3iv//etD9/+fdpv/fzwX+/3LY6P/n7TIzCRtwPYYZaPvGH7dKgAb0AA1o/v/tQsh/oO0bP26TZiYqDIB+1/1+wef/z3vN/3/erPr/5aAOyHZdogMRGPIe38/7gvz+Gej3z18OG/8H2u5BvAFn7GO/Htdv/3pAQejzXjkhoO3tH7dIxY7EpEwMBgAr6O5Q8udliwAAAABJRU5ErkJggg==
!usage
{{{[img[ministarbn.png]]}}}
[img[ministarbn.png]]
!notes
//none//
!type
image/png
!file

!url

!data
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADcSURBVHjaYvz//z8DJYCJgUIwyA04duyY08GDB53wqWHBJ/n379/2f//+gZjmuNQwosfC2bNnOYGazH7//u3Kyspa/efPH4YPHz50AOkdQLFTQUFB3wl5YQITE9MBTk7Oam5ubgYormBmZj4ANGQCwTAA2p718+fPTTCXMTIygvGPHz9AYlkEDTA1NQV6/W/Nt2/fQIYxAJ3N8PHjR1B41ISHh/8lKhCBGqWB3mB4/PjxF5ABLCwsPCAxoNRloqIRqFgU6IIOoK3yIPz169cOoPNFiYqFEZgXAAIMAOBRfOVrkZozAAAAAElFTkSuQmCC
!usage
{{{[img[minitoolbar75.png]]}}}
[img[minitoolbar75.png]]
!notes
//none//
!type
image/png
!file

!url

!data
data:image/png;base64,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Wb952LavTsub63TDmI3JmLp5TD0vv/zyUrWD+idtGZ287BooDvL566/HUF9vcak3XH4CeKt478Avfhm3i/euXr26fLO8PoC8LMx9nDp1qgxVNdB8yDRjlutnkNpuuOW2uV7GKY+X+8995fsZsIxsvr+Stult89p7pYdO1/LE73e9Z9VpeTeO2ZiMqRvH1PPSSy8tdfroMXeUz03l/aT85C6fecoZUM6aLl++XEajOe2r9pHb5o3x3D5nSNW2eRmXoZr9ZlbW6fo3Z2S5bX5v27b+/EYV2k7Xx20na6VHITq97nQt3vZXY6WPf9dyTX+vxmxMxtTNY+p58cUXl1YqYP3Gd31q1/aEfJtqu+aT9G3Tx2aZ68esB6pT6Nby0NtKz4e0LVvpr8sPdbO9G8dsTMbUjWPqOXbsmP+9DPCj0FOU6y9OA/Bj0OsUAIIFIFiAYAEIFoBgAYIFIFgAggUIFoBgAQgWIFgAggUgWIBgAQgWgGABggUgWACCBQgWgGABCBYgWACCBSBYgGABCBYgWACCBSBYgGABCBaAYAGCBSBYAIIFCBaAYAEIFiBYAIIFIFiAYAEIFoBgAYIFIFgAggUIFoBgAQgWIFgAggUgWIBgAQgWIFgAggUgWIBgAQgWgGABggUgWACCBQgWgGABCBYgWACCBSBYgGABCBaAYAGCBSBYAIIFCBaAYAEIFiBYAIIFIFiAYAEIFiBYAIIFIFiAYAEIFoBgAYIFIFgAggUIFoBgAQgWIFgAggUgWIBgAQgWgGABggUgWACCBQgWgGABCBYgWACCBSBYgGABCBYgWACCBSBYgGABCBaAYAGCBSBYAIIFCBaAYAEIFiBYAIIFIFiAYAEIFoBgAYIFIFgAggUIFoBgAQgWIFgAggUgWIBgAQgWIFgAggUgWIBgAQgWgGABggUgWACCBQgWgGABCBYgWACCBSBYgGABCBaAYAGCBSBYAIIFCBaAYAEIFiBYAIIFIFiAYAEIFiBYAIIFIFiAYAEIFoBgAYIFIFgAggUIFoBgAQgWIFgAggUgWIBgAQgWgGABggUgWACCBQgWgGABCBYgWACCBSBYgGABCBYgWACCBSBYgGABCBaAYAGCBSBYAIIFCBaAYAEIFiBYAIIFIFiAYAEIFoBgAYIFIFgAggUIFoBgAQgWIFgAggUgWIBgAQgWIFgAggUgWIBgAQgWgGABggUgWACCBQgWgGABCBYgWACCBSBYgGABCBaAYAGCBSBYAIIFCBaAYAEIFiBYAIIFCJZTAAgWgGABggUgWACCBQgWgGABCBYgWACCBSBYgGABCBaAYAGCBSBYAIIFCBaAYAEIFiBYAIIFIFiAYAEIFoBgAYIFIFiAYAEIFoBgAYIFIFgAggUIFoBgAQgWIFgAggUgWIBgAQgWgGABggUgWACCBQgWgGABCBYgWACCBSBYgGABCBaAYAGCBSBYgGABCBaAYAGCBSBYAIIFCBaAYAEIFiBYAIIFIFiAYAEIFoBgAYIFIFgAggUIFoBgAQgWIFgAggUgWIBgAQgWgGABggUgWIBgAQgWgGABggUgWACCBQgWgGABCBYgWACCBSBYgGABCBaAYAGCBSBYAIIFCBaAYAEIFiBYAIIFIFiAYAEIFoBgAYIFIFiAYAEIFoBgAYIFIFgAggUIFoBgAQgWIFgAXeP/AgwA0jqcxJxbVEEAAAAASUVORK5CYII=
!usage
{{{[img[more.png]]}}}
[img[more.png]]
!notes
//none//
!type
image/png
!file

!url

!data
data:image/png;base64,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
!usage
{{{[img[new.png]]}}}
[img[new.png]]
!notes
//none//
!type
image/png
!file

!url

!data
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QMCBiAyOlCc9wAAADV0RVh0Q29tbWVudAAoYykgMjAwNCBKYWt1YiBTdGVpbmVyCgpDcmVhdGVkIHdpdGggVGhlIEdJTVCQ2YtvAAACq0lEQVQ4y5WSS0hUcRTGv//cO+O9OtdHJllqZlI+CEUiE8ShBiXUpKKQbGLKcGG0CBOyRcsQMapFj02ii4igAgMDJcgQSXQmSkrNijSVTJ1xdJy5d6739W/loDURfqtz4Pt+nHM4BBFUXNnUTCkcBiUpIISYiDHLEPq0/2Vr459edn1TVN6UwTCk72JtZVq5vQBxAg9VN+DxBVN7ej9cISbmLKV6SX9X69eIAJYlb++11G/fk7ljLBBSRmd9khJaVVlF06NtJflZ6enJe1tuPXYBiF/LMGtFSdXV2/Xnj5YVH8z5rKi6m7eYFQBEpyCqTg3vSmiWi+YQzXM7dSYlc3L8bScAmMIkhj1Xbi9AIKSOsSxDLWbGIIRQUBiabiiUwuganOwuKswBw3Kn1nJhwKpC4wUrD1nRV1XNSDQzpguJsZxzV7LgyN+91QElkDrlEf08zyEgqVxtXYNpww0IIUTRdEiyajIMKiZYo+D1Sy5RCjErQUkbnpaGFUU3qaqxFuEBiGFADM9KXl8gRpRVy4qk+jOSYzH6w/deVHQ6tyQp7m+LHsFqSfD6g4gTeLWjrVncsIKZ0QZ63gyDj2JzJ34tiwDw0yfqHye8/t7hmYUlUTZX7E+rGHKNwcph4q8bbBNCxzu7+uWZ6fnstCTroWvtAzfPHM665P4yH2JYkui0Z1X7F5dy3IMjqsD6SsOrr/+DY6cbq2QqPC8rLbIUHshGNM9B1XX4lkUMucbxzjWixXHS5SftNx5EBABAbV1DYohucQVkpDtOJDGEACwLdHXPBRnNv6+j7c4U/qeaGrvV6bRRz2IfFWUX/T75jDqdNhrJy/6DoQLA/bsPkZ2bjempaWxaTqeNzsy+MgLSEP00+sLY7AQAUFV98nqNIMQfWVhYeJ2XF/sokuk3Vkw2XnyKHQQAAAAASUVORK5CYII=
!usage
{{{[img[options.png]]}}}
[img[options.png]]
!notes
//none//
!type
image/png
!file

!url

!data
data:image/png;base64,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
!usage
{{{[img[red50.png]]}}}
[img[red50.png]]
!notes
//none//
!type
image/png
!file

!url

!data
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAA9SURBVHja7M4BDQAwCAAgNYtBX9M21vAbJCCn+8VhFccJCgoKCgoKCgoKCgoKCgoKCgoKCgoKCv4aXAEGAACmAfGoUV1CAAAAAElFTkSuQmCC
<<version>>
!usage
{{{[img[save.png]]}}}
[img[save.png]]
!notes
//none//
!type
image/png
!file

!url

!data
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHDSURBVDiNlZO/ixNBFMc/M7u5hOQUlDRGiCwcXCMoIhyIVoqlhbXYHKJ/g2JnpZ0o/gOihdhYpMmdWKiIWFyrFoFcYeNuk+wym533xiJ3+SEnxC8zw4Ph++XzHjyzde/1WxG5yVSBuRbrI/+sta9iEbnxcPsqWx+egqoJqqBKCGo4rFVBZV6HwM71Bzx78/l2DCAa+P3iMUGEVaXX7gMQA0ZEOPXoOYS/qf+tysssAC+Bk7furmwGkHffFwMUEWE4HK5kTpJkicCIKFEUkSTJ6gRe5wRyMLzBYLCSudvtLs+gOkj7H4LlFryy/eQjjewrUbF/tMNMn0njDHnrLBunj88JvAhMCqJinyuXL1Gv16nVarNrraUsS/I8Z3f3PfnaBt63ALCHOKqKtRHtdpt+v0+v16PZbCIijMdjRqMRRVGAsagqfrEFlYCqYgy0Wq0ZdZqmlGWJcw7nHGVZEkIgqFBVC0OcVJ7YTjcky7JZQJZlS2bnHAFQVSrvpwHWmC97P3+d3+ysN8ZZIE1TOp0O3nvSNF0yO+cgwIljazMCc/HOy3Vj+FS3fvNc/K1uTEwgMD0Hu7GwI4bAnr+Qi6kbkfDjD/3zDzpnSVtRAAAAAElFTkSuQmCC
!usage
{{{[img[separa.png]]}}}
[img[separa.png]]
!notes
//none//
!type
image/png
!file

!url

!data
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAARCAYAAADkIz3lAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAzSURBVHjaYvz//z8DMmBkZHQA0UDxA8jiTAxEAkZ0E3EBDBNBVsOsJ8vqUTeOHDcCBBgAahcVJyW8pQsAAAAASUVORK5CYII=
!usage
{{{[img[tabs.png]]}}}
[img[tabs.png]]
!notes
//none//
!type
image/png
!file

!url

!data
data:image/png;base64,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
!usage
{{{[img[tag.png]]}}}
[img[tag.png]]
!notes
//none//
!type
image/png
!file

!url

!data
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKTWlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVN3WJP3Fj7f92UPVkLY8LGXbIEAIiOsCMgQWaIQkgBhhBASQMWFiApWFBURnEhVxILVCkidiOKgKLhnQYqIWotVXDjuH9yntX167+3t+9f7vOec5/zOec8PgBESJpHmomoAOVKFPDrYH49PSMTJvYACFUjgBCAQ5svCZwXFAADwA3l4fnSwP/wBr28AAgBw1S4kEsfh/4O6UCZXACCRAOAiEucLAZBSAMguVMgUAMgYALBTs2QKAJQAAGx5fEIiAKoNAOz0ST4FANipk9wXANiiHKkIAI0BAJkoRyQCQLsAYFWBUiwCwMIAoKxAIi4EwK4BgFm2MkcCgL0FAHaOWJAPQGAAgJlCLMwAIDgCAEMeE80DIEwDoDDSv+CpX3CFuEgBAMDLlc2XS9IzFLiV0Bp38vDg4iHiwmyxQmEXKRBmCeQinJebIxNI5wNMzgwAABr50cH+OD+Q5+bk4eZm52zv9MWi/mvwbyI+IfHf/ryMAgQAEE7P79pf5eXWA3DHAbB1v2upWwDaVgBo3/ldM9sJoFoK0Hr5i3k4/EAenqFQyDwdHAoLC+0lYqG9MOOLPv8z4W/gi372/EAe/tt68ABxmkCZrcCjg/1xYW52rlKO58sEQjFu9+cj/seFf/2OKdHiNLFcLBWK8ViJuFAiTcd5uVKRRCHJleIS6X8y8R+W/QmTdw0ArIZPwE62B7XLbMB+7gECiw5Y0nYAQH7zLYwaC5EAEGc0Mnn3AACTv/mPQCsBAM2XpOMAALzoGFyolBdMxggAAESggSqwQQcMwRSswA6cwR28wBcCYQZEQAwkwDwQQgbkgBwKoRiWQRlUwDrYBLWwAxqgEZrhELTBMTgN5+ASXIHrcBcGYBiewhi8hgkEQcgIE2EhOogRYo7YIs4IF5mOBCJhSDSSgKQg6YgUUSLFyHKkAqlCapFdSCPyLXIUOY1cQPqQ28ggMor8irxHMZSBslED1AJ1QLmoHxqKxqBz0XQ0D12AlqJr0Rq0Hj2AtqKn0UvodXQAfYqOY4DRMQ5mjNlhXIyHRWCJWBomxxZj5Vg1Vo81Yx1YN3YVG8CeYe8IJAKLgBPsCF6EEMJsgpCQR1hMWEOoJewjtBK6CFcJg4Qxwicik6hPtCV6EvnEeGI6sZBYRqwm7iEeIZ4lXicOE1+TSCQOyZLkTgohJZAySQtJa0jbSC2kU6Q+0hBpnEwm65Btyd7kCLKArCCXkbeQD5BPkvvJw+S3FDrFiOJMCaIkUqSUEko1ZT/lBKWfMkKZoKpRzame1AiqiDqfWkltoHZQL1OHqRM0dZolzZsWQ8ukLaPV0JppZ2n3aC/pdLoJ3YMeRZfQl9Jr6Afp5+mD9HcMDYYNg8dIYigZaxl7GacYtxkvmUymBdOXmchUMNcyG5lnmA+Yb1VYKvYqfBWRyhKVOpVWlX6V56pUVXNVP9V5qgtUq1UPq15WfaZGVbNQ46kJ1Bar1akdVbupNq7OUndSj1DPUV+jvl/9gvpjDbKGhUaghkijVGO3xhmNIRbGMmXxWELWclYD6yxrmE1iW7L57Ex2Bfsbdi97TFNDc6pmrGaRZp3mcc0BDsax4PA52ZxKziHODc57LQMtPy2x1mqtZq1+rTfaetq+2mLtcu0W7eva73VwnUCdLJ31Om0693UJuja6UbqFutt1z+o+02PreekJ9cr1Dund0Uf1bfSj9Rfq79bv0R83MDQINpAZbDE4Y/DMkGPoa5hpuNHwhOGoEctoupHEaKPRSaMnuCbuh2fjNXgXPmasbxxirDTeZdxrPGFiaTLbpMSkxeS+Kc2Ua5pmutG003TMzMgs3KzYrMnsjjnVnGueYb7ZvNv8jYWlRZzFSos2i8eW2pZ8ywWWTZb3rJhWPlZ5VvVW16xJ1lzrLOtt1ldsUBtXmwybOpvLtqitm63Edptt3xTiFI8p0in1U27aMez87ArsmuwG7Tn2YfYl9m32zx3MHBId1jt0O3xydHXMdmxwvOuk4TTDqcSpw+lXZxtnoXOd8zUXpkuQyxKXdpcXU22niqdun3rLleUa7rrStdP1o5u7m9yt2W3U3cw9xX2r+00umxvJXcM970H08PdY4nHM452nm6fC85DnL152Xlle+70eT7OcJp7WMG3I28Rb4L3Le2A6Pj1l+s7pAz7GPgKfep+Hvqa+It89viN+1n6Zfgf8nvs7+sv9j/i/4XnyFvFOBWABwQHlAb2BGoGzA2sDHwSZBKUHNQWNBbsGLww+FUIMCQ1ZH3KTb8AX8hv5YzPcZyya0RXKCJ0VWhv6MMwmTB7WEY6GzwjfEH5vpvlM6cy2CIjgR2yIuB9pGZkX+X0UKSoyqi7qUbRTdHF09yzWrORZ+2e9jvGPqYy5O9tqtnJ2Z6xqbFJsY+ybuIC4qriBeIf4RfGXEnQTJAntieTE2MQ9ieNzAudsmjOc5JpUlnRjruXcorkX5unOy553PFk1WZB8OIWYEpeyP+WDIEJQLxhP5aduTR0T8oSbhU9FvqKNolGxt7hKPJLmnVaV9jjdO31D+miGT0Z1xjMJT1IreZEZkrkj801WRNberM/ZcdktOZSclJyjUg1plrQr1zC3KLdPZisrkw3keeZtyhuTh8r35CP5c/PbFWyFTNGjtFKuUA4WTC+oK3hbGFt4uEi9SFrUM99m/ur5IwuCFny9kLBQuLCz2Lh4WfHgIr9FuxYji1MXdy4xXVK6ZHhp8NJ9y2jLspb9UOJYUlXyannc8o5Sg9KlpUMrglc0lamUycturvRauWMVYZVkVe9ql9VbVn8qF5VfrHCsqK74sEa45uJXTl/VfPV5bdra3kq3yu3rSOuk626s91m/r0q9akHV0IbwDa0b8Y3lG19tSt50oXpq9Y7NtM3KzQM1YTXtW8y2rNvyoTaj9nqdf13LVv2tq7e+2Sba1r/dd3vzDoMdFTve75TsvLUreFdrvUV99W7S7oLdjxpiG7q/5n7duEd3T8Wej3ulewf2Re/ranRvbNyvv7+yCW1SNo0eSDpw5ZuAb9qb7Zp3tXBaKg7CQeXBJ9+mfHvjUOihzsPcw83fmX+39QjrSHkr0jq/dawto22gPaG97+iMo50dXh1Hvrf/fu8x42N1xzWPV56gnSg98fnkgpPjp2Snnp1OPz3Umdx590z8mWtdUV29Z0PPnj8XdO5Mt1/3yfPe549d8Lxw9CL3Ytslt0utPa49R35w/eFIr1tv62X3y+1XPK509E3rO9Hv03/6asDVc9f41y5dn3m978bsG7duJt0cuCW69fh29u0XdwruTNxdeo94r/y+2v3qB/oP6n+0/rFlwG3g+GDAYM/DWQ/vDgmHnv6U/9OH4dJHzEfVI0YjjY+dHx8bDRq98mTOk+GnsqcTz8p+Vv9563Or59/94vtLz1j82PAL+YvPv655qfNy76uprzrHI8cfvM55PfGm/K3O233vuO+638e9H5ko/ED+UPPR+mPHp9BP9z7nfP78L/eE8/sl0p8zAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACEElEQVR42qTSS4/SUBQH8PslWBu+xSTEzzMbM06MbtWJxqiJjjruHF9xx9MyUB7SsQRIS5vb8BRKCGlKEQiJRtE2A5z8XZg0Q2DGhYuzO/9fzjn3MgDsf4q12220Wi00Gg3U63XUajUYhgHOOXRdD/wTaDabIKKNchwHnHOoqnopwhqNBogItm3DMAxYluUjtm1D13WUy+ULEVar1UBE4JwDANM0jc/ncyyXSxARLMuCoiiQZXkrwgzD8Bs1TTtTVdX2PA/T70MUmwkQEQaDAUqlEiRJ2kAY59wfebVawfM8zH58xbOTfTyK70JuxkFE6Pf7kGUZuVxuDWG6rruz2QxEhMVigcm3IQ5PruPVp9t4e3oPz0/2faTX60GSJKTTaR9h1Wr1qqIo7nQ6BRHhi63hcWIXrwt38UF+iHen99cQ0zSRy+UgCEIAAGMAWKVSCZVKJXcymYCI0B0aeCrs4U3hwEcOk3uQ6mEQETqdDtLpNOLxeMDfpVgshmRZdsfj8Qby/vMDvBRv4ih5C8vVAqZpIpPJIBqNXlm7qCRJoUKh4I5GIx958vEaXqRu4Dh/gF+/f54PB/0Vzlc+nw9ls1nXcZy/49ocx/k78M5cPxyJRIL+Ebd9DlEUQ6lUyrVt239i0zQhiuJa+EIAAEsmkzuCILiWZaHb7W4NXwoAYIlEYicWi7miKCIcDge39fwZALL0KlDtlZLoAAAAAElFTkSuQmCC
!usage
{{{[img[toolbar50.png]]}}}
[img[toolbar50.png]]
!notes
//none//
!type
image/png
!file

!url

!data
data:image/png;base64,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AMiAAAAAAAAAAAAAZEAAAAAAAAAAAAAyIAAAAAAAAAAAABkQAAAAAAAAAACADAgAAAAAAAAAAEAGBAAAAAAAAAAAIAMCAAAAAAAAAACQAQEAAAAAAAAAAMiAAAAAAAAAAAAAZEAAAAAAAAAAAAAyIAAAAAAAAAAAABkQAAAAAAAAAACADAgAAAAAAAAAAEAGBAAAAAAAAAAAIAMCAAAAAAAAAACQAQEAAAAAAAAAAMiAAAAAAAAAAAAAZEAAAAAAAAAAAAAyIAAAAAAAAAAAABkQAAAAAAAAAACADAgAAAAAAAAAAEAGBAAAAAAAAAAAIAMCAAAAAAAAAACQAQEAAAAAAAAAAMiAAAAAAAAAAAAAZEAAAAAAAAAAAAAyIAAAAAAAAAAAABkQAAAAAAAAAACADAgAAAAAAAAAAEAGBAAAAAAAAAAAIAMCAAAAAAAAAACQAQEAAAAAAAAAAMiAAAAAAAAAAAAAZEAAAAAAAAAAAAAyIAAAAAAAAAAAABkQAAAAAAAAAACADAgAAAAAAAAAAEAGBAAAAAAAAAAAIAMCAAAAAAAAAACQAQEAAAAAAAAAAMiAAAAAAAAAAAAAZEAAAAAAAAAAAAAyIAAAAAAAAAAAABkQAAAAAAAAAACADAgAAAAAAAAAAEAG/leAAQCCLX6xxN8p7AAAAABJRU5ErkJggg==
!usage
{{{[img[trans.gif]]}}}
[img[trans.gif]]
!notes
//none//
!type
image/gif
!file

!url

!data
data:image/gif;base64,R0lGODlhDwASALMAAO5LQps9OfSmpJs5NcdoZvBoY8ZXU8dRS8ZFPsZiX79CO8E8NO9hW/BeWcRAOQAAACH5BAEAAA8ALAAAAAAPABIAAAQR8MlJq7046827/2AojmRphhEAOw==
!usage
{{{[img[trans10.png]]}}}
[img[trans10.png]]
!notes
//none//
!type
image/png
!file

!url

!data
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAA9SURBVHja7M4BDQAwCAMwjoz79zlsQNIq6Evya7Gu5QQFBQUFBQUFBQUFBQUFBQUFBQUFBQUFrwZHAAEGAMBdA2ezghhCAAAAAElFTkSuQmCC
!usage
{{{[img[trans25.png]]}}}
[img[trans25.png]]
!notes
//none//
!type
image/png
!file

!url

!data
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAA9SURBVHja7M4BDQAwCAMwjrL7NzVsQNIq6Evya7Gu5QQFBQUFBQUFBQUFBQUFBQUFBQUFBQUFrwZHAAEGAHvxA42VG80hAAAAAElFTkSuQmCC
!usage
{{{[img[trans50.png]]}}}
[img[trans50.png]]
!notes
//none//
!type
image/png
!file

!url

!data
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAA6SURBVHja7M4BDQAwCAMwjvI7HzYgaRX0Jfm1WNdygoKCgoKCgoKCgoKCgoKCgoKCgoKCgoJXgyPAAMVLA81vz3LRAAAAAElFTkSuQmCC
!usage
{{{[img[trans75.png]]}}}
[img[trans75.png]]
!notes
//none//
!type
image/png
!file

!url

!data
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAA9SURBVHja7M4BDQAwCAMwjn9PlzZsQNIq6Evya7Gu5QQFBQUFBQUFBQUFBQUFBQUFBQUFBQUFrwZHAAEGAPWBBAz/4X6BAAAAAElFTkSuQmCC
!usage
{{{[img[trans90.png]]}}}
[img[trans90.png]]
!notes
//none//
!type
image/png
!file

!url

!data
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAA9SURBVHja7M4BDQAwCAMwjn+dtzFsQNIq6Evya7Gu5QQFBQUFBQUFBQUFBQUFBQUFBQUFBQUFrwZHAAEGAMo5BDNv3Z9QAAAAAElFTkSuQmCC
!usage
{{{[img[transblack10.png]]}}}
[img[transblack10.png]]
!notes
//none//
!type
image/png
!file

!url

!data
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAA7SURBVHja7M4BDQAgDMCwgYz7F4qNk7QKeqppsdtygoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK/Bp8AAwCVagBqzxN1vAAAAABJRU5ErkJggg==
!usage
{{{[img[transblack25.png]]}}}
[img[transblack25.png]]
!notes
//none//
!type
image/png
!file

!url

!data
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAA7SURBVHja7M4BDQAgDMCwgbL7V4WNk7QKeqppsdtygoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK/Bp8AAwBQ/gCQoAsQawAAAABJRU5ErkJggg==
!usage
{{{[img[transblack50.png]]}}}
[img[transblack50.png]]
!notes
//none//
!type
image/png
!file

!url

!data
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAA6SURBVHja7M4BDQAgDMCwgfJLx8ZJWgU91bTYbTlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBwV+DT4ABAJpYANBTClZtAAAAAElFTkSuQmCC
!usage
{{{[img[translupa50.png]]}}}
[img[translupa50.png]]
!notes
//none//
!type
image/png
!file

!url

!data
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQQAAAAoCAYAAAAYEYTzAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFjSURBVHja7NmxiQJBGIDRcblYbMBsSzC2AjGxDjsQ9hbsYAsQCzCzAjG3ATOxDfV+YQI9wUvPeQ8W1nGiCT5mZ3rX6/U7AfyoLAEgCMAvX68G9/t9czgc0vF4vP+u6zrN5/PWcsFn6z2fIWw2m2a73abL5fK4laiqNJlM0mw2EwYo5ZMhYtDv99N0Ok3r9bqNJ95jLP4DCglC13VN7AzG4/HDTiDeYyz+izmWDQoIQj4zePVZkMfyHKCATwZAEO7iNiHEweLzxDyW5wAfHoS4WozbhN1u9xCFeI+xPMeywWf687VjNhwO03K5FAUo4QwhDg9Xq1U7Go3SYDC4P/Ee148Rg9PplBaLhZsGKGGH8E7EIKJgpwAF7BDeiQhEDM7ns9WD0ncIgB0CIAiAIACCAAgCgCAAggAIAiAIgCAAggAIAiAIgCAAggAIAiAIgCAAggAIAiAIgCAAggAIAvDf3AQYAAx/fbttIuacAAAAAElFTkSuQmCC
!usage
{{{[img[update.png]]}}}
[img[update.png]]
!notes
//none//
!type
image/png
!file

!url

!data
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADmklEQVR4nGLUk7wuLqfybpmI5FcnBiLB379MP14/596x45hlIAAAAP//YpFVfrvMxpnDydNXl4GZmZXh/z8Ghn//GRj+/f3P8O8fAwT//Q8R+8fA8P/ff4Zfv39xHNh3K+DP75PzAQAAAP//YhEU++Tk4KzN8OEdE8PXL78Z/v9jYPjz9z/Dv78MDH///md48vQOw7+/DAziYsoMf6HinFxMDIaGCgy3b1yIAAAAAP//Yvn37x/Dr19MDC+e/mH4+w+h8d9fBoaELEEGBgZjhsbKUwzsLH8Z/kJd8/b1XwY5JVYGRsY/HAAAAAD//0TPMRIAEBAEwT1F7P+vREntkLl8gp4KaM/QHEf4/sjO571QCwunro8iQA8AAP//PM0xDoAgEEXBR7QhdGY7738qS3qWhEqS/dAYLzBzLokxRPf49+aVOV/APiDo/qAAKVHyzWUHS2IDAAD//2L59+8fw5fPfxk+vIMYkFspzCAtK4YS6jOXWjMwMDAwfP3yj6Gu6DnD6xf/GL58/sfw798/BgAAAAD//2L69/8fw5dPEBd8eP+Xoav2NcPDe78wou7erZ8MxanPGO7c+MXw4d0fhs+ffjP8+fubAQAAAP//YoK44B/Dx3d/Gd6/+8Pw7Olvhpr85wz3bv2Ea759/TtDYeojhlvXvzC8f/eN4d3brwxfv/xk+P3nBwMAAAD//2L58+c3w+dPvxjevf3B8PffP2gM/GfIib/LMGGuIsN/BgaGzKjbDB8//obL/f37j+HTJ0aG339+MAAAAAD//yTMMQ6AIBBFwRcjt/BK9l7dzhsQDQaE3b8WFNPOOqxRykfOL24zqP3CXRz7iSSeuxMRwJSWDSlho/IDAAD//2L58/sHw5fP3xk+fPjC8P//f4abr+0YGBhMcCZjeYF5DP8YfjD8Z+Bk+PXnBwMAAAD//2L5/ec7AwPjZ4a/f39AbcAPWJiEGP7//87AzMrE8PfPTwYAAAAA//9i+f3r389/jB/ZpWRZGV48+8agLLSRgYHhHwMDAwPDf6iTGf7/gzufmYWRQUKKk+E/0weGXz9ZPgIAAAD//2L5/kVm74tXl7yk5FQYZBW5Gf78ZmVgZGRg+A/VxMjIyPD//z+4YSysPxj+/P3I8PTpHYZfX9R3AAAAAP//YmRgYGDQU1ixnJnzcuB/xh/sDFC7GWCB9h+ileE/AwMD4z+og3g//fupuePKo9hwAAAAAP//AwBa7sSdQBupoQAAAABJRU5ErkJggg==
!usage
{{{[img[x.gif]]}}}
[img[x.gif]]
!notes
//none//
!type
image/gif
!file

!url

!data
data:image/gif;base64,R0lGODlhDwASALMAAO5LQps9OfSmpJs5NcdoZvBoY8ZXU8dRS8ZFPsZiX79CO8E8NO9hW/BeWcRAOQAAACH5BAEAAA8ALAAAAAAPABIAAAQw8MlJq7046807HUpRKEO2DI4zLBmADAMCZM0RBAeTGUGSBIZMgCAQEAKepHLJ9EQAADs=